【问题标题】:Dynamic SAS macro variable动态 SAS 宏变量
【发布时间】:2018-10-16 03:33:43
【问题描述】:

我有一个这样的 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. 值和两个附加字符sn 的变量相同的值。是否有一个函数可以返回我需要的变量名称,这样我就不需要无穷无尽的if 语句?

【问题讨论】:

  • 为什么一个加引号而另一个不加引号?

标签: sas


【解决方案1】:

您添加更多&。宏处理器将&& 解析为&,并为自己设置一个注释以重新扫描令牌以进行更多宏处理。

%let tp=kdb;
%let kdbsn=1234;
%let sn=&&&tp.sn ;

所以&& -> &&tp. -> kdb 得到&kdbsn,这将解析为1234

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多