全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1069 0
2016-01-22

如果有按周期,比如按月,按周对数据进行计数或者累加,可以使用以下宏。SAS默认的周一年就会循环一次,有些长期的数据不太合适。
*ps:在tvar这个宏里自定义周的开始时间。
inset=指定输入数据集
key=日期变量
slot=tweek (周)  或 slot=tmonyy(月)
start=1 默认从第一周开始显示
var=cnt 默认为计数,要求和的话只要把这个选项改成求和变量就可以了,结果如下:

_name_        tweek1tweek2tweek3tweek4tweek5tweek6tweek7tweek8tweek9tweek10tweek11tweek12tweek13
test_c

1

2

3

4

5

6

7

8

9

10

11

12

13

test_c_acc

1

3

6

10

15

21

28

36

45

55

66

78

91



%global setn;
%let setn=1;

**********主宏*************
/*数据集中不要有cnt为变量名的变量*/
/*获取最终变量名前缀*/
%macro wr(inset,key,slot=tweek,start=1,var=cnt);
data _null_;
a=substr("&inset",find("&inset",'.')+1);
call symput('nm',a);
run;

/*变量后缀*/
data a1;
set &inset;
cnt=1;
svar=&var;
if &var eq cnt then call symput('pfix','c');
else call symput('pfix','s');
run;
%tvar(a1,&key)
proc summary data=a1;
class &slot;
var svar;
output out=a2 sum(svar)=%sysfunc(cats(&nm,_&pfix));
run;

data b1;
set a2;
if _type_=1;
%sysfunc(cats(&nm,_&pfix,_acc))+%sysfunc(cats(&nm,_&pfix));
if &slot ge &start;
keep &slot %sysfunc(cats(&nm,_&pfix,_acc)) %sysfunc(cats(&nm,_&pfix));
run;

data _null_;
call symput('sn',cats('c',"&setn"));
run;
%sort(b1,&slot)
proc transpose data=b1 out=&sn prefix=&slot;
id &slot;
run;
data _null_;
call symput('setn',&setn+1);
run;
%mend;


***********两个被调用的宏***************
%macro tvar(ins,dt);
data &ins;
set &ins;
tweek=floor((&dt-'4jan2016'd)/7)+1;
a=put(&dt,monyy7.);
tmonyy=input(a,monyy7.);
drop a;
format tmonyy monyy7.;
run;
%mend;


%macro sort(in,key);
proc sort data=∈
by &key;
run;
%mend;



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群