我在SAS中有一组输入宏变量。它们是动态的,并且是根据sas存储过程中用户的选择生成的。

For example:There are 10 input values 1 to 10.
The name of the macro variable is VAR_. If a user selects 2,5,7 then 4 macro variables are created.
&VAR_0=3;
&VAR_=2;
&VAR_1=5;
&VAR_2=7;


后缀为0的第一个数字提供计数。接下来的3个提供值。

注意:如果用户仅选择一个值,则仅创建一个宏变量。例如,如果用户选择9,则&var_ = 9;将被创建。不会有任何计数宏变量。
我正在尝试使用这些变量创建一个sas表。

应该是这样

OBS    VAR
-----------
1      2
2      5
3      7
-----------


这就是我尝试过的。不确定这是否是正确的方法。
它没有给我最终的解决方案,但我至少可以获取表中宏变量的名称。我如何获得他们的价值观?

data tbl1;
do I=1 to &var_0;
VAR=CAT('&VAR_',I-1);
OUTPUT;
END;
RUN;
PROC SQL;
CREATE TABLE TBL2 AS
SELECT I,
CASE WHEN VAR= '&VAR_0' THEN '&VAR_' ELSE VAR END AS VAR
from TBL1;
QUIT;


谢谢您的帮助。

周杰伦

最佳答案

我不了解您的编号方案,如果可以的话,建议您更改它; &var_变量非常令人困惑。

无论如何,最简单的方法是SYMGET。这将从宏符号表中返回一个值,您可以在运行时指定该值。

%let VAR_0=3;
%let VAR_=2;
%let VAR_1=5;
%let VAR_2=7;

data want;
  do obs = 1 to &var_0.;
    var = input(symget(cats('VAR_',ifc(obs=1,'',put(obs-1,2.)))),2.);
    output;
  end;
run;

10-02 02:13
查看更多