新SAS用户。
我有一个数据集,我想在其中初始化100个新变量VAR101,VAR102 ... VAR200。这是我尝试过的一件事:
data stuff;
set a.stuff;
do i=101 to 200;
cat('var',put(i,3.)) = .;
end;
run;
我收到以下错误:
ERROR: Undeclared array referenced: cat.
ERROR: Variable cat has not been declared as an array.
我试图以几种不同的方式做到这一点。这是对我来说最有意义的一个,但到目前为止它们都没有成果。 (我尝试在" cat"周围添加"输入"语句。)
我该怎么做?
(我实际上要做的事情要复杂得多,但我甚至无法解决这个问题。)
答案 0 :(得分:2)
您无法使用数据步骤代码生成要在同一数据步骤中使用的变量名称。 SAS需要在开始运行数据步骤之前“编译”代码。
如果您只想define
变量,请使用LENGTH
或ATTRIB
语句。对于一系列以相同前缀开头且具有数字后缀的变量名,您可以使用这样的变量列表。
data stuff;
set a.stuff;
length var101 - var200 8 ;
run;
如果变量不在输入数据集(a.stuff
)中,那么它们将自动丢失。
如果要将类似的代码块应用于变量列表,还应该查看ARRAY
语句。
data stuff;
set a.stuff;
by id;
array newvar var101 - var200 ;
if first.id then do i=1 to dim(newvar);
newvar(i)=.;
end;
* other statements for your progam ;
run;
答案 1 :(得分:0)
请检查此宏是否可以解析您的查询:
%macro abc;
%let i=101;
%do %while (&i. <=201);
data want&i.;
var&i.=.;
run;
data want_final;
merge want_final want&i.;
run;
proc datasets lib=work memtype=data;
delete want&i.;
run;
quit;
%let i=%eval(&i.+1);
%end;
%mend;
%abc;