【发布时间】:2018-10-19 10:20:12
【问题描述】:
首先,为我糟糕的英语道歉,但那是因为我不是本地人。我也是 SAS 编程的新手,我需要有人帮助我解决这个困扰我的问题。 我有一个数据集 A,其中包含一个表示年份和月份的数字字段 YM(例如 200902),我用它来过滤数据集。特别是,我想使用 N 个不同的值 YM 获得 N 个过滤数据集。
- A_filtered_200901 = A.filter(YM == 200901)
- A_filtered_200902 = A.filter(YM == 200902)
- A_filtered_200903 = A.filter(YM == 200903)
- ...
我的想法是生成用于过滤的 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])
我知道这不是正确的方法,但我希望有人能给我一些关于正确执行此操作的信息。
谢谢!!
【问题讨论】:
-
拆分数据有什么特殊原因吗?作为 SAS 新手,您是否知道使用
where语句和by语句可以在逻辑上发生很多“分裂”?当数据正确排序时,by语句将自动处理组中的观察结果。 -
是的,我明白你的意思。我可以使用 SELECT + AGG FUNCTION + GROUP BY 来获取所有组,但实际上我为了寻求一般性而简化了我的问题的陈述。我真正的问题如下:构建一个时间序列,计算迭代 N 个日期的每个数据集的元素,但使用两个过滤器 A.filter(INI_YM 200901 ) 而不是我提出的那个。所以我的方法是构造N个数据集,格式为[YM, Count],然后全部追加得到时间序列数据集。
-
顺便说一句,该评论是 Richard :D 的答案。 Reeza,感谢您提供的文档,非常有帮助!