Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS中获取站点名称_Sas_Sas Metadata - Fatal编程技术网

在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

如果我们在SAS中运行
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(确实如此)-该文件是空的。