我有一个主数据集A:
Var1 Var2 Var3
X 50 201704
Y 100 201705
Z 150 201704
Var1 - String Var2 - 数字 Var3 - 日期yymmn6。
我想从之前3个月的数据集(类似的histpry数据集)中提取所有这些记录的var2。
说,对于X和Z,我需要来自201703,201702&的数据集的var2变量。 201701.对于Y,我需要来自201704,201703和201702的数据集的var2。
然后我必须计算每次观察的所有var2的总和。
我相信这是一项宏观工作。我无法显示我的代码,因为数据要复杂得多。
有人可以帮忙解决这个问题吗?
答案 0 :(得分:0)
我希望这可以帮助第一点:
data set_A;
input Var1 $ Var2 Var3;
cards;
X 50 201704
Y 100 201705
Z 150 201704
;
run;
/ 我想从之前3个月的数据集中提取所有这些记录的var2。 /
data set_A;
set set_A;
Y=substr( left(var3),1,4);
M=substr( left(var3),5,2);
date_var = mdy(M, '01', Y);
run;
data Var2_last3_M;
set set_A;
if date_var >= date()-30*3; /*You can use intck function here too*/
keep = var2;
run;
编辑:根据反馈,我就是这样做的:
%macro Get_month_data(year, month);
data wanted&year._&month.;
set set_a;
if year(date_var)=&year and
month(date_var)=&month.; /*adjust as needed see below*/
run;
%mend Get_month_data;
%Get_month_data(2017,4); /*Apr of 2017 data */
%Get_month_data(2017,5); /*May data*/
既然你说你想要月向后数据,逻辑可能是这样的:
(month(date_var)=&month. or month(date_var)=%eval(&month.-1) );
根据需要进行调整。