动态宏观变量访问SAS(Dynamic macro variable access SAS)

2019-10-29 18:29发布

我用电话symputx创建宏变量项目1到N项的清单,现在我想这样的数组中的点1获取项目1至它们传输到阵列中的另一个datastep,现货2得到项目2等。

    do j=1 to &num_OR;
    rulesUsed{j}=&&Item&j;
    end;

我读的是双符号语法是引用这样的宏观变量的方式,但我不断收到各种错误。 我敢肯定有解决这个简单的方式,但我是新来的SAS,没有文件我已经通过阅读的来了在搜索中提到的问题,这个确切的类型。

Answer 1:

简短的回答是:不这样做,在一般。 宏变量没有存储数据的好方法,而且几乎总是有一个更好的办法。

但是,如果你需要,你这里的问题是,宏变量不能使用数据步变。

 do j=1 to &num_OR;
    rulesUsed{j}=&&Item&j;
 end;

j是一个数据变量步骤,而不是一个宏变量,所以它不是&j 。 您需要:

1 -使用symget检索宏变量。 这是一个数据阶梯函数采用一个正常数据步骤字符参数(这样的变量,一个“”字符串等),并具有该名称返回宏变量。 所以

rulesUsed[j] = symget(cats("item",j));

2 - 使用宏循环来检索宏变量。

%do j = 1 %to &num_or;
  rulesUsed[&j.] = &&item&j;
%end;

这两种方法都做工精细。



Answer 2:

如果你有一个像下面的数据集:

data have ;
  ruleno+1;
  input rule $20. ;
cards;
Value1
Value2
Value3
;

你可以将其转换为使用广PROC TRANSPOSE。

proc transpose data=have out=want(drop=_name_) prefix=rulesUsed ;
  var rule;
  id ruleno;
run;



文章来源: Dynamic macro variable access SAS