首先,为我的英语不好而道歉,但这是因为我不是本地人。我也是SAS编程的新手,我需要有人帮助我解决这个困扰我的问题。 我有一个数据集A,其中包含一个表示年份和月份(例如200902)的数字字段YM,用于过滤数据集。特别是,我想使用N个差值YM获得N个过滤的数据集。
我的想法是生成用于过滤的YM序列,然后将其作为包含PROC SQL的%macro的参数。在代码/伪代码中:
data ym_dataset;
date = input(put(20090201, 8.), yymmdd8.);
do i = 1 to 3;
aux1 = intnx('MONTH', date, i);
aux2 = put(aux1, yymmddn8.);
list_of_ym_values = substr(aux2 , 1, 6);
output;
end;
run;
%macro my_macro(list_of_ym_values);
proc sql;
%do i = 1 %to dim(&list_of_ym_values)
select *
from A
where YM = &list_of_ym_values(i)
%end
quit;
%mend my_macro;
%my_macro(ym_dataset[list_of_ym_values])
我知道这不是正确的方法,但是我希望有人可以向我阐明正确执行此方法的方法。
谢谢!
答案 0 :(得分:0)
您需要遍历变量列表,并且可以在宏变量中创建此值。但是正如@richard在评论中建议的那样,分割数据集并不是一个好主意。
/* create macrovariable with all values*/
proc sql;
select list_of_ym_values into :List
separated by "|" from ym_dataset;
%put &list;
/* scan through each variable and create new dataset*/
%macro one;
%do i=1 %to %sysfunc(countw(&list),"|") ;
%let val= %scan(&list,&i,|);
proc sql;
create table want_&val as
select * from ym_dataset
where list_of_ym_values = "&val";
%end;
%mend;
%one;