【发布时间】:2015-02-04 09:47:48
【问题描述】:
任何人都可以为以下问题提供建议或逐步解决方案。
我面临的问题是,我在一项研究中有 2 组原始数据,一组用于 MRD,一组用于 Neuro。我创建了 2 个单独的自动执行文件,以将正确的数据读入交互式 SAS 会话。但是在批处理程序时,SAS 不会为数据分配正确的库位置。
我需要做的是扫描正在为 MRD 或 Neuro 批处理的文件的目录路径,然后指示批处理过程为 MRD 或 Neuro 使用关联的 autoexec.sas 文件。所有这些都需要在批处理过程开始之前发生,以便分配正确的库。
我公司加载autoexec.sas文件的流程如下; 1. SAS 快捷方式包括对名为 biosetup.inc 的文件的自定义调用。 2. Biosetup.inc 包含 autoexec.sas 文件的研究路径目录。 3. Autoexec.sas 分配要在交互式 SAS 会话中使用的库名称和路径,以及设置宏的路径等。
我认为我需要解决此问题的方法是在 biosetup.inc 中创建一个宏,该宏将分配正确的自动执行文件。
这可能吗?
到目前为止,我已经能够确定目录路径等,现在我还需要确保使用正确的 autoexec 文件。
%macro MAIN;
%let proctype = %scan(&SYSPROCESSNAME,1,%str( ));
/*Define macro variable for the path and filename*/
%if &proctype = DMS
%then %let pathpgmref=%sysget(SAS_EXECFILEPATH);
%else %let pathpgmref=%sysfunc(GetOption(SYSIN));
/*Define separate macro variables for the filename.extension, filename, and extension*/
/*Reverse path and filename to scan from the front (back)*/
%let pathpgmref = %sysfunc(reverse(&pathpgmref));
%let pgmextref = %scan(&pathpgmref,1,\);
%let extref = %scan(&pgmextref,1,.);
/*Reverse back to proper order*/
%let pathpgmref = %sysfunc(reverse(&pathpgmref));
%let pgmextref = %sysfunc(reverse(&pgmextref));
%let extref = %sysfunc(reverse(&extref));
%let pgmref = %scan(&pgmextref,1,.);
/*Remove filename to create program directory macro variable*/
%let temp = %eval(%index(&pathpgmref,&pgmref) - 1);
%let pathref = %substr(&pathpgmref,1,&temp);
%let PATH = %sysfunc(quote(&pathref));
%let EXTN = %sysfunc(quote(&extref));
%let PGMN = %sysfunc(quote(&pgmref));
Data _Null_;
if index(&PATH,"MRD") and lowcase(&EXTN) = "sas" then call symput("DATATYPE","MRD");
else if index(&PATH,"NEURO") and lowcase(&EXTN) = "sas" then call symput("DATATYPE","NEURO");
else if index(&PATH,"Listings") or index(&PATH,"Tables") and lowcase(&EXTN) = "sas" then do;
if lowcase(substr(reverse(&PGMN),1,1)) = "a" then call symput("DATATYPE","MRD");
if lowcase(substr(reverse(&PGMN),1,1)) = "b" then call symput("DATATYPE","NEURO");
end;
Run;
%if &DATATYPE = "MRD" %then %do;
%include "MRD_Setup.sas";
%end;
%if &DATATYPE = "NEURO" %then %do;
%include "NEU_Setup.sas";
%end;
%put ProcType: &proctype;
%put FullPath: &pathpgmref;
%put DirePath: &pathref;
%put FullFile: &pgmextref;
%put FileName: &pgmref;
%put ExtnType: &extref;
%put DataType: &DATATYPE;
%mend;
%MAIN;
【问题讨论】:
-
当您说“扫描目录路径”时,您的意思是
determine what the path to the .sas file is?
标签: sas