我有这样的SAS代码:
%if &tp. = kdb %then %do;
%let sn = "&kdbsn.";
%end;
%if &tp. = bkb %then %do;
%let sn = &bkbsn.;
%end;
%if &tp. = edw %then %do;
%let sn = &edwsn.;
%end;
%if &tp. = odw %then %do;
%let sn = &odwsn.;
%end;
%if &tp. = adw %then %do;
%let sn = &adwsn.;
%end;
%put &sn;
在许多其他情况下,我需要这样做,并且模式始终相同。根据变量&tp.
,我将变量&sn.
设置为与变量相同的值,其名称的前3个字符等于&tp.
的值,另外两个字符{{1 }}。是否有一个函数可以返回我需要的变量的名称,所以我不需要无数的sn
语句?
答案 0 :(得分:5)
您添加了更多&
。宏处理器将&&
解析为&
并为其设置注释,以重新扫描令牌以进行更多的宏处理。
%let tp=kdb;
%let kdbsn=1234;
%let sn=&&&tp.sn ;
因此&&
-> &
和&tp.
-> kdb
得到&kdbsn
,它将解析为1234
。