SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 717|回复: 4
打印 上一主题 下一主题

请帮忙帮我解释下语句的意思

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-4-15 16:08:39 | 只看该作者

请帮忙帮我解释下语句的意思

data temp;
        cur_day=weekday(today());
        cur_month=put(today(),yymmn6.);
        first_day=compress(cur_month||'01');
        last_day=put(today(),yymmddn8.);
run;

data temp;
        set temp;
        retain countday 0;
        do while (first_day<=last_day);
                if weekday(input(first_day,yymmdd8.)) not in ('1' '7') then countday=countday+1;
                first_day=first_day+1;
        end;
run;

proc sql noprint;
        select countday into :countday from temp;
quit;

请帮我解释各句的意思  自己不全理解  谢谢了
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-4-15 20:09:25 | 只看该作者

Re: 请帮忙帮我解释下语句的意思

第一个DATA STEP获取当前日期,计算本月的第一天
第二个DATA STEP计算本日是本月的第多少的工作日
PROC SQL创建宏变量,存储计算出的天数
用intck()也可以
[code:27bsiexb]data _null_;
        first_day=intnx('month',today(),0);
        last_day=today();
        count_day=ifn(1<weekday(first_day)<7,
                                        intck('weekday',first_day-1,last_day),
                                        intck('weekday',first_day,last_day));
        call symputx('countday',count_day);
run;
%put NOTE-*** countday=&countday ***;[/code:27bsiexb]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-4-15 20:18:39 | 只看该作者

Re: 请帮忙帮我解释下语句的意思

[code:1qznvb25]
data temp;
/*得到今天是星期几*/
cur_day=weekday(today());
/*得到今天所在的月份,月份格式yyyymm*/
cur_month=put(today(),yymmn6.);
/*今天所在月份的首日日期,日期格式yyyymmdd*/
first_day=compress(cur_month||'01');
/*今天日期,日期格式为yyyymmdd*/
last_day=put(today(),yymmddn8.);
run;

/*获取今天所在月的月初到今天为止的工作日数*/
data temp;
set temp;
retain countday 0;
do while (first_day<=last_day);
/*双休日不参与统计计数*/
if weekday(input(first_day,yymmdd8.)) not in ('1' '7') then countday=countday+1;
first_day=first_day+1;
end;
run;

proc sql noprint;
/*将工作日数赋给宏变量countday*/
select countday into :countday from temp;
quit;


/*==========================================================================*/
/*看了以上代码让我快吐血,绕了很多个圈子,实在看不下去了,一行程序就可以搞定的事情*/
/*                     我的等价程序已站内短信于你,楼主请注意及时查收                   */
/*==========================================================================*/




[/code:1qznvb25]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-4-15 21:04:49 | 只看该作者

Re: 请帮忙帮我解释下语句的意思

这个程序有些小问题,就是不太注意变量的属性。数字和字符混用。因为都是数字字符,所以在结果还没有大的问题。多了几个log notes 而已
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-4-16 08:36:19 | 只看该作者

Re: 请帮忙帮我解释下语句的意思

谢谢大家的帮忙
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-3-3 14:08 , Processed in 0.162314 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表