在SAS中获取站点名称
如果我们在SAS中运行在SAS中获取站点名称,sas,sas-metadata,Sas,Sas Metadata,如果我们在SAS中运行proc setinit,我们可以获得站点名称和站点编号 可以使用和syssite轻松提取站点号。除了重定向和解析日志输出外,是否有其他方法可以通过编程方式获取站点名称 我检查了\u automatic变量、sashelp数据集和proc registry输出,但没有结果。通过Chris Blake和FriedEgg的指针,我得到了以下解决方案: data _null_; length StoredText $2000 sitename $200; rc=metad
proc setinit
,我们可以获得站点名称和站点编号
可以使用和syssite
轻松提取站点号。除了重定向和解析日志输出外,是否有其他方法可以通过编程方式获取站点名称
我检查了
\u automatic
变量、sashelp
数据集和proc registry
输出,但没有结果。通过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;
这对我来说很有效,不涉及设置元数据服务器:
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;
下面是从
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;
我猜您在UNIX环境中使用SAS是因为您编写的路径,那么本文档将有所帮助。
那么@SCR的答案就派上用场了。正如文件所说 这个!SASROOT目录包含使用SAS 9.4所需的文件 及 如果您的系统上安装了所有可用的SAS产品,则!SASROOT目录包含下表中列出的文件和目录: 名为“setinit.sas”的文件列在该链接的表中。
顺便说一句,我在我的Windows机器上尝试了@SCR的答案,它是有效的。还请注意路径是
%sysget(SASROOT)\core\sasinst\setinit.sss“
这对我不起作用-我尝试过:%sysget(SASHOME)/SASFoundation/&sysver/core/sasinst/setinit.sss”
它解析为/pub/sas/SASFoundation/9.4/core/sasinst/setinit.sss
,我得到了“文件不存在”(它不存在)。我尝试搜索setinit.sss
,但它不在我的系统上,但搜索setinit*
生成了许多文件。这似乎不是一种可靠的获取设置的方法(即,它在任何SAS站点上都能工作),但可能我遗漏了什么?如果有一种可靠的方法可以在不使用元数据的情况下找到setinit文件,那肯定是更可取的,我同意。你认为每个SAS站点上都有sid文件吗?信息也包含在其中。我怀疑您正在读取管理员保存的用于应用setinits的文件。该文件可能没有一个一致的位置或名称,如果它存在的话。@dcr-我不知道,但我想SAS不一定知道它被保存在哪里@tom-我认为你是对的,如果你没有运行元数据管理器,这是行不通的。如果您只是在运行SAS,它将弹出一个窗口来登录元数据服务器。对于我的用例来说,这已经足够了,请注意并非每个人都有元数据。事实上,如果没有元数据,日志重定向似乎是唯一的方法。您好@whymath-感谢您的回答,但是我们的(unix,您是正确的)中不存在该目录系统。doc链接很有帮助,它正确地指出,setinit.sas
文件存在于!但是,SASROOT(确实如此)-该文件是空的。