使用DO循环(SAS)初始化许多新变量

时间:2018-01-24 00:23:39

标签: sas

新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"周围添加"输入"语句。)

我该怎么做?

(我实际上要做的事情要复杂得多,但我甚至无法解决这个问题。)

2 个答案:

答案 0 :(得分:2)

您无法使用数据步骤代码生成要在同一数据步骤中使用的变量名称。 SAS需要在开始运行数据步骤之前“编译”代码。

如果您只想define变量,请使用LENGTHATTRIB语句。对于一系列以相同前缀开头且具有数字后缀的变量名,您可以使用这样的变量列表。

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;