Sas 根据用户指定路径变量

Sas 根据用户指定路径变量,sas,Sas,我想根据用户分配一个名为folder的路径变量。我正在使用以下代码。但我总是要运行这段代码两次才能正常工作。你知道为什么吗?我是否需要以任何方式初始化userid变量 %global folder; data _null_; userid = &sysuserid.; if userid in ('user1', 'user2') then do; call symput('folder','<special_path>'); end; else do

我想根据用户分配一个名为
folder
的路径变量。我正在使用以下代码。但我总是要运行这段代码两次才能正常工作。你知道为什么吗?我是否需要以任何方式初始化
userid
变量

%global folder;
data _null_;
  userid = &sysuserid.;
  if userid in ('user1', 'user2') then do;
    call symput('folder','<special_path>');
  end;
  else do;
    call symput('folder',"<default_path>");
  end;
  %put NOTE: user is &sysuserid. path to '<standard folder>' folder assigned is &folder.;
run;
%全局文件夹;
数据为空;
userid=&sysuserid。;
如果userid在('user1','user2')中,则执行;
调用symput('文件夹','');
结束;
否则你会;
调用symput('folder',“”);
结束;
%注意:用户是&sysuserid。分配给“”文件夹的路径为&folder。;
跑

这是事件发生的顺序:-

  • 宏变量在数据步骤代码中解析和插补
  • 提交带有插补(已解析)宏值的数据步骤代码 因此,当您提交代码时,实际提交的是:-

    data _null_;
      userid = SOME_USER_ID;
      if userid in ('user1', 'user2') then do;
        call symput('folder','<special_path>');
      end;
      else do;
        call symput('folder',"<default_path>");
      end;
      %put NOTE: user is &sysuserid. path to '<standard folder>' folder assigned is ;
    run;
    
    数据\u空\u;
    userid=某个用户ID;
    如果userid在('user1','user2')中,则执行;
    调用symput('文件夹','');
    结束;
    否则你会;
    调用symput('folder',“”);
    结束;
    %注意:用户是&sysuserid。已分配“”文件夹的路径;
    跑
    
    这就是put语句在第一个实例中不解析宏变量文件夹的原因


    解决方案是->将
    %put
    语句置于datastep之外。

    我认为&userid是保留变量?至少在我的系统中,它来自windows first.lastname,它被解释为具有宏点。尝试userid=“&userid”;在陈述中也指后者。