我正在尝试编写一个宏,该宏将接收一串由分隔的变量名|
并对其执行计算(例如ab dc|def
)。我尝试了以下代码,但我在扫描函数上收到一个奇怪的错误:“宏函数 %SCAN 的参数太少。”
SYMBOLGEN
告诉我&from.
并&k.
正确解决:“FROM 解析为 ab dc|def”和“K 解析为 1”,所以我不确定问题出在哪里。最初我怀疑%str()
在宏执行时间之后才屏蔽该值,导致参数无法解析。但这似乎并非如此,因为%unquote(%str(..scan function..))
给出了同样的错误。
%macro data_mapping_sum(from);
%let k=1;
%let temp_ind = "%scan(&from., &k.,"|")";
%let THIS_FAILS = %str(%'%scan(&from., &k.,"|")%'n);
%do %while( (&temp_ind. NE "") );
%unquote(&THIS_FAILS.) = 999;
%let k = %eval(&k. + 1);
%let temp_ind = "%scan(&from., &k.,"|")";
%let THIS_FAILS = %str(%'%scan(&from., &k.,"|")%'n);
%end;
%mend;
data test;
%data_mapping_sum(ab dc|def);
run;