2

如果我们proc setinit在 SAS 中运行,我们可以获得站点名称和站点编号。

可以使用 轻松提取站点编号&syssite。除了重定向和解析日志输出之外,有没有办法以编程方式获取站点名称

我检查了_automatic_变量、sashelp数据集和proc registry输出,但无济于事。

4

4 回答 4

3

这对我有用,并且不涉及设置元数据服务器:

PROC IMPORT OUT= WORK.temp 
        DATAFILE= "D:\Program Files\SASHome\SASFoundation\9.4\core\sasinst\setinit.sss" 
        DBMS=DLM REPLACE;
        DELIMITER='3D'x; 
        GETNAMES=NO;
        DATAROW=1; 
RUN;

proc sql noprint;
     select var2 into: name
     from temp
     where var1 = 'SITEINFO NAME';
quit;

%put &name;
于 2019-04-06T22:31:53.550 回答
3

这是从PROC SETINIT.

filename out temp;
proc printto log=out; run;
proc setinit; run;
proc printto log=log; run;
data sitename;
  infile out;
  input @'Site name:' @;
  length sitename $200;
  sitename=scan(_infile_,2,"'");
  put sitename=;
  output;
  stop;
run;
于 2019-04-06T23:43:47.603 回答
0

我猜你在 UNIX 环境中使用 SAS,因为你写的路径,那么这个文档会有所帮助。
!SASROOT 目录的内容 - SAS® 9.4 Companion for UNIX Environments, Sixth Edition

然后@SCR 的答案就派上用场了。正如文件所说

!SASROOT 目录包含使用 SAS 9.4 所需的文件。

如果您的系统上安装了所有可用的 SAS 产品,!SASROOT 目录包含下表中列出的文件和目录:

该链接的表中列出了一个名为“setinit.sas”的文件。
顺便说一句,我在我的 Windows 机器上尝试了 @SCR 的答案,它有效。还请注意路径是"%sysget(SASROOT)\core\sasinst\setinit.sss".

于 2019-04-08T06:25:42.987 回答
0

在 Chris Blake 和 FriedEgg 的指导下,我最终得到了这个解决方案:

data _null_;
  length StoredText $2000 sitename $200;
  rc=metadata_getattr("omsobj:TextStore?@Name='Setinit text'"
    , "StoredText", StoredText);
  storedtext=subpad(storedtext,index(storedtext,'SITEINFO NAME=')+15);
  sitename=substr(storedtext,1,index(storedtext,"'")-1);
  put sitename=;
run;
于 2019-04-06T22:08:19.750 回答