【发布时间】:2012-04-05 09:06:12
【问题描述】:
我正在学习 SAS 并编写此宏:
%macro firstMacro(mvLO, OLO);
%local Count;
%local Wordy;
%local Resty;
%let Resty = '';
%let Count = %sysfunc( count( &OLO, %str( ) ) );
%let Wordy = %sysfunc( scan(&OLO, 1 ,%str( ) ) );
%let Wordy = "&Wordy";
%let Resty = &Wordy;
%put &Resty;
/*strange behavior here*/
%DO I=2 %TO &Count+1;
%let Wordy = %sysfunc(scan(&OLO, &I ,%str( ) ));
%let Wordy = "&Wordy";
%put Wordy is;
%put &Wordy;
%let Resty = %sysfunc(cats(&Resty, %str(,), &Wordy));
%put &Resty;
%END;
%put FINAL OUT;
%put &Resty;
%mend firstMacro;
并调用它:
%firstMacro(mvLO=WORK, OLO=field_1 field_2 field_3);
看看这个输出:
FINAL OUT
"field_1""field_2","field_3
所以,我问 SAS:
为什么你在field_1和field_2之间吃我的逗号(,)?
【问题讨论】:
-
你能说一下你想用这个宏做什么吗?
-
是的,我正在尝试这样做:
"field_1","field_2","field_3"。在这个宏之后,我可以在宏的 Where 中将此字符串用于 IN 子句。当我尝试在 WHERE with IN 的宏中使用不带引号field_1,field_2,field_3的字符串时,出现错误 -
这条线
%DO I=2 %TO &Count+1;是我认为的罪魁祸首。试试%DO I=2 %TO %EVAL(&Count+1);