首页 > 解决方案 > 仅当用户名与列表匹配时才运行宏

问题描述

我正在尝试根据用户名的条件运行宏,我在哪里进行更改:

例如:我有以下带有用户名的数据集:

data users2; 
input name$; 
    cards; 
    ABC
    DEF
    YUT
    GTR
    ; 
run;

我有一个宏要调用:%callmacro;

proc sql; 
select name into: usernames separated by ',' from users2; 
quit;

所以我调用宏

%macro NEW(); 
%if &sysuserid in (&usernames) %then %do;
%callmacro;
%end;
%mend;


%new;

所以在这里我得到一个错误:

ERROR: Required operator not found in expression: ( "&sysuserid" in 
(&usernames))

仅当用户名在列表中匹配时,我才想运行宏。否则有什么方法可以从 SAS 宏调用 WINDOWS AD 组并检查该 Windows AD 组中的 sysuserid 是否存在?

标签: sassas-macro

解决方案


您可以检查宏内的用户名

%macro ThisIsConditionallyRestricted(nametable=users2);
  proc sql noprint;
    select name from &nametable where name = "&sysuserid";
  quit;
  %if &SQLOBS = 0 %then %do;
    %put WARNING: You were not prepared!;
    %return;
  %end;
  … 
%mend;

%ThisIsConditionallyRestricted;

推荐阅读