今天给大家Share一下SAS Macro获取文件路径的技巧!
获取路径有哪些用途呢:
如果路径都用宏变量表示,当文件夹的物理路径发生变化时,
都还是可以直接运行程序!不需要修改成程序~
上代码!
代码语言:javascript复制%macro getpath;
%global currentroot PGMLIB Path Project;
%let currentroot= %sysfunc(getoption(sysin));
%if "¤troot" eq "" %then %do;
%let currentroot= %sysget(sas_execfilepath);
%let Path=%sysfunc(PRXCHANGE(s/(.*)\.*/1/,-1,¤troot));
%end;
%let PGMLIB=&Path.macro;
%put NOTE:PGMLIB =&PGMLIB.;
%put NOTE:Path =&Path.;
%inc "&PGMLIB.*.sas";
%mend;
%getpath;
如上:定义的&Path。 为SAS程序所在路径。(如上代码可以直接复用)
SAS 创建文件夹:<前面是文件名,后面是路径>如下代码:
这样做的的好处是啥呢,每次运行数据或者数据集想实现自动存下来,这个时候就可以用SAS自动创建文件夹的方式来存储。
代码语言:javascript复制/*获取系统时间*/
data _null_;
call symput("date",left(compress(put("&sysdate"d,yymmdd10.),"-"," ")));
run;
/*以时间命名的新建文件夹*/
data _null_;
NewDir=dcreate("&date.","D:");
run;
proc Sql 定义Macro变量的实现语法批操作。
代码语言:javascript复制<如果我们需要在data step中对某一类变量实现类似的操作>
<如:很多变量都有类似的 if 语句的判断>
first:
proc contnets 获取变量列表 并筛选出你需要变量。
利用data Step 对name 进行一些连接
data _varstemp12;
set _varstemp10;
NAME1=strip(left("input("))||strip(left(NAME))||strip(",??yymmdd10.)");
Cond="if length("||strip(left(NAME))||")=7 then "|| strip(NAME)||left("=compress("||strip(NAME)||left("||'-15')"));
run;
对所有不完整日期的变量进行补充“-15”操作
proc sql noprint;
select NAME1 into:varlist1 separated by ";" from DATALIB._varstemp12 ;
quit;
data RAWDATA2;
set RAWDATA1;
&varlist1.;
run;
如上:
讲语句都封装在宏变量里面,直接调用宏变量,就可以执行了。。。例子只举一个喔,好多类似的操作,可以大大的优化程序,和提高编程效率