【发布时间】:2012-02-09 17:16:01
【问题描述】:
此代码采用两个宏并将它们分配给数据步骤中的数组,然后循环遍历 ln_vars 中定义的每个变量,创建一个新变量,该变量是该变量的自然对数,并将 _ln 附加到名称
%let ln_vars = var1 var2;
%let ln_names = %add_string(&ln_vars, _ln);
data transform;
set analysis;
array ln &ln_vars;
array ln_n &ln_names;
*call execute ('%add_string(%str(&ln_vars), _ln)');
do over ln;
ln_n = log(ln);
end;
run;
也许 sas 代码中有更好的习惯用法(我希望如此)。 我希望能够只传递一个宏(ln_vars 宏)并从数据步骤内部调用 %add_string() 函数。 注释的“调用执行”返回正确的字符串,但是当我尝试
1588 array ln_n call execute ('%add_string(%str(&ln_vars), _ln)');
ERROR: Attempt to initialize variable call in numeric array ln_n with character constant
'%add_string(%str(&ln_vars), _ln)'.
【问题讨论】:
-
在您尝试自动化之前,编写能够成功执行的代码,以便在分析中进行一次观察。发布该代码(和示例数据),它会更容易提供帮助。
-
上面的代码有效。我想用下面注释掉的调用执行命令的某个版本替换数据步骤中的 &ln_names。