使用sas自动化变量命名

时间:2014-05-09 13:44:35

标签: sas

我有以下代码

%macro test;
data ttest;
set test;
%do 
var14_t_0=lag(var14);
%do i=1 %to 6;
var14_t_&i=lag(var14_t_%eval(&i-1));
%end;
drop var14;
run;
%mend;
%test;

var14是一个变量名,我正在使用lag函数。但是,我的表中有很多变量。我正在尝试自动化变量命名,但我确定如何做到这一点。

我想到了以下内容:

使用proc sql创建如下表:

proc sql;
create table label as 
select name
from dictionary.columns
where memname = upcase('Afr') and name not in ('date');

创建表后,我只需要从label表中获取变量名称。但问题是我不知道如何将上面的代码与我的表格链接起来。

我不是说我需要这张桌子而且我可能需要别的东西,但我不确定我是SAS新手的步骤。

提前感谢您提供的任何提示。

1 个答案:

答案 0 :(得分:0)

你几乎就在那里。

proc sql;
select name into :namelist separated by ' '
from ... (as you have above)
;
quit;

生成一个宏变量&namelist,它将一个列表中的所有name分隔为空格。然后您可以随意使用它。你当然可以改变由字符分隔的,你可以选择复杂的表达式(即代替select name,你可以说select cats('%mymacro(mvar=',name,')')或类似。

我建议尝试执行后者 - 构建一个宏,它将执行您想要多次执行的任何操作,然后使用此方法构造对该宏的调用。它通常比名单列表上的宏循环更容易。