尝试编写宏以按 yyyymmdd 读取 24 个月的数据
Trying to write macro to read 24 months of data by yyyymmdd
我正在尝试编写一个宏来替换一些当前代码。现在的代码是这样的:
data _null_;
call symput('as_of_date_nbr1', put(intnx('month', today(),-1, 'E'), yymmddn.));
run;
%put &as_of_date_nbr1 yields 20210831
每个 30 个月都有一个 data_null。然后在语句
的数据步骤中使用该变量
where date = &as_of_date_nbr1
我想编写一个宏,其中变量 as_of_date_nbr 将采用 1-30 的宏变量,而 intnx 函数也将采用 1-30 的宏变量
所以如果可能的话,像这样循环
data _null_;
call symput('as_of_date_nbr.&macvar, put(intnx('month,today(),-&macvar, 'E'), yyyymmddn.))
到目前为止我运气不好,任何想法将不胜感激。
首先尝试创建一个包含 30 个所需日期的数据集。
data demo;
do i=1 to 30;
var_name=catt('month', put(i, z2. -l));
var_value=intnx('month', today(), -1*i, 'e');
format var_value yymmddn8.;
output;
end;
run;
确定正确后,您可以添加 CALL SYMPTUX 行来创建宏变量。
call symputx(var_name, put(var_value, yymmddn8.), 'g');
根据您的总体情况,您可能想要探索 CALL EXECUTE。例如,如果您使用这些值循环宏而不是调用 symputx,则可以使用 CALL EXECUTE() 直接使用这些值调用宏。
因此,如果您有这样一个名为 %filter 的宏:
%macro filter(date_param);
sas code
%mend;
您可以这样称呼它:
call execute(catt('%filter_data(', put(var_value, yymmddn8.), ');'));
总的来说应该是这样的:
data demo;
do i=1 to 30;
var_name=catt('month', put(i, z2. -l));
var_value=intnx('month', today(), -1*i, 'e');
format var_value yymmddn8.;
call symputx(var_name, put(var_value, yymmddn8.), 'g');
*call execute(catt('%filter_data(', put(var_value, yymmddn8.), ');'));
output;
end;
run;
*check macro variables created properly;
%put &month01.;
%put &month15.;
%put &month30.;
我正在尝试编写一个宏来替换一些当前代码。现在的代码是这样的:
data _null_;
call symput('as_of_date_nbr1', put(intnx('month', today(),-1, 'E'), yymmddn.));
run;
%put &as_of_date_nbr1 yields 20210831
每个 30 个月都有一个 data_null。然后在语句
的数据步骤中使用该变量where date = &as_of_date_nbr1
我想编写一个宏,其中变量 as_of_date_nbr 将采用 1-30 的宏变量,而 intnx 函数也将采用 1-30 的宏变量 所以如果可能的话,像这样循环
data _null_;
call symput('as_of_date_nbr.&macvar, put(intnx('month,today(),-&macvar, 'E'), yyyymmddn.))
到目前为止我运气不好,任何想法将不胜感激。
首先尝试创建一个包含 30 个所需日期的数据集。
data demo;
do i=1 to 30;
var_name=catt('month', put(i, z2. -l));
var_value=intnx('month', today(), -1*i, 'e');
format var_value yymmddn8.;
output;
end;
run;
确定正确后,您可以添加 CALL SYMPTUX 行来创建宏变量。
call symputx(var_name, put(var_value, yymmddn8.), 'g');
根据您的总体情况,您可能想要探索 CALL EXECUTE。例如,如果您使用这些值循环宏而不是调用 symputx,则可以使用 CALL EXECUTE() 直接使用这些值调用宏。
因此,如果您有这样一个名为 %filter 的宏:
%macro filter(date_param);
sas code
%mend;
您可以这样称呼它:
call execute(catt('%filter_data(', put(var_value, yymmddn8.), ');'));
总的来说应该是这样的:
data demo;
do i=1 to 30;
var_name=catt('month', put(i, z2. -l));
var_value=intnx('month', today(), -1*i, 'e');
format var_value yymmddn8.;
call symputx(var_name, put(var_value, yymmddn8.), 'g');
*call execute(catt('%filter_data(', put(var_value, yymmddn8.), ');'));
output;
end;
run;
*check macro variables created properly;
%put &month01.;
%put &month15.;
%put &month30.;