string - 通过在 do loop SAS 中附加来创建列表
问题描述
我有一个宏变量
%let dates = (200101, 200102, 200103);
如何创建此列表?
var_out = pop_200101 pop_200102 pop_200103
我可以循环并选择日期:
%do i=1 %to %sysfunc(countw(%superq(dates),%str(,)));
%let this_date = %scan(&dates., &i.);
我可以连接:
catt(pop,_&this_date.);
但我不知道如何将其实际放入列表中。
编辑:附加信息
我有一些数据
data example;
input Q40_ret_200101 Q40_ret_200102 Q40_ret_200103;
datalines;
4 6 .
. 8 9
3 7 4
2 3 .
;
run;
我正在尝试做
proc summary
data = example nway;
var Q40_ret_200101 Q40_ret_200102 Q40_ret_200103;
output out = count
N = pop_200101 pop_200102 pop_200103;
run;
然而实际上我的数据集要大得多,我无法写入所有变量。我设法获得了 var 语句的变量名列表。
PROC CONTENTS
DATA = example
OUT = VAR_NAMES (KEEP = NAME) NOPRINT;
RUN;
/*read in variable names and use substr to test if starts with q40_ret*/
DATA PARSE;
SET VAR_NAMES;
WHERE (SUBSTR(NAME, 1,8) = 'Q40_ret_');
RUN;
DATA _NULL_;
FILE 'C:';
SET PARSE END = FINIS;
IF _N_ = 1 THEN PUT '%LET VAR_LIST = ';
PUT NAME;
IF FINIS THEN DO;
CALL SYMPUT('NUM' , COMPRESS(_N_));
PUT ';';
PUT 'RUN;';
END;
RUN;
/*Next, the file ‘BUILD‘ is read back into the SAS program using a %INCLUDE statement.*/
%include 'C:\BUILD';
到目前为止,我的 proc 摘要语句如下所示:
proc summary
data = example nway;
var &var_list;
output out = pop (drop = _TYPE_ _FREQ_)
N =;
run;
但我仍然需要生成并声明输出变量名称
解决方案
辅助会话程序doSubL
可以计算和填充var_out
宏符号的值。使用的好处%sysfunc(doSubL(
是边程序不会在调用会话中创建步骤边界。
例子:
宏变量值的构造dates
也可以用作doSubL
代码中的数组初始化。
%let dates = (200101, 200102, 200103);
%let rc=%sysfunc(dosubl(
data _null_;
array dates (%sysfunc(countw(&dates))) &dates;
do index = 1 to dim(dates);
length list $200;
list = catx(' ', list, cats('pop_',dates(index)));
end;
call symput('var_out',trim(list));
run;
));
%put &=var_out;
---------- LOG ----------
VAR_OUT=pop_200101 pop_200102 pop_200103
推荐阅读
- php - 带有自定义关系的 sql 排名
- bash - 用于从 CSV 文件中删除列的 Shell 脚本命令
- python-3.x - 获取二进制编码字符串而不是文件大小
- python - 将自定义 python 库路径添加到 Pyspark
- javascript - 新窗口中的就绪功能
- angularjs - asp.net mvc Angular js数据表不工作
- python - Numpy python R等效索引
- sql-server - SQL Server、ADO 锁记录
- python - 在 python 中的字符串格式化期间,不是所有的参数都被转换
- dataframe - if 语句:如果数据点的数量小于 x 则返回 NaN 否则计算数据帧的年化回报