SAS - 如何根据另一个数据集中的动态日期变量提取多个数据集?

时间:2017-07-17 08:02:49

标签: sas-macro

我有一个主数据集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的总和。

我相信这是一项宏观工作。我无法显示我的代码,因为数据要复杂得多。

有人可以帮忙解决这个问题吗?

1 个答案:

答案 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) );

根据需要进行调整。