SAS Macro小技巧—获取文件路径

2019-10-21 16:51:07 浏览数 (1)

今天给大家Share一下SAS Macro获取文件路径的技巧!

获取路径有哪些用途呢:

如果路径都用宏变量表示,当文件夹的物理路径发生变化时,

都还是可以直接运行程序!不需要修改成程序~

上代码!

代码语言:javascript复制
%macro getpath;
%global currentroot PGMLIB Path Project;
%let currentroot= %sysfunc(getoption(sysin));
%if "&currentroot" eq "" %then %do;
%let currentroot= %sysget(sas_execfilepath);
%let Path=%sysfunc(PRXCHANGE(s/(.*)\.*/1/,-1,&currentroot));
%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;

如上:

讲语句都封装在宏变量里面,直接调用宏变量,就可以执行了。。。例子只举一个喔,好多类似的操作,可以大大的优化程序,和提高编程效率

0 人点赞