前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-批量修改.sas后缀成.txt

SAS-批量修改.sas后缀成.txt

作者头像
Setup
发布2020-06-06 22:52:24
2.8K0
发布2020-06-06 22:52:24
举报

利用SAS程序来批量修改SAS程序后缀名成.TXT的方法。

代码

如下代码,三个宏参数,inpath为需要转化后缀名SAS程序所在的路径,allYN控制是否将指定路径下所有SAS程序转化成TXT后缀(所有指的是包含指定路径下存在子文件夹),outencoding控制转化后TXT纯文本的编码。

代码语言:javascript
复制
%macro filesas2txt(inpath=,allYN=1,outencoding=utf8);  %if &allYN eq 1 %then %do;    %let _pipfg=/b/s;  %end;  %else %do;    %let _pipfg=/b;  %end;  data _null_;    call symput("date",left(put("&sysdate"d,yymmdd10.)));    call symput("date1",left(compress(put("&sysdate"d,yymmdd10.),"-"," ")));  run;*删除文件夹;  systask command "rd /s/q &inpath.\&date1.";*睡眠0.5秒;  data _null_;    rc=sleep(0.5);  run;
  data _null_;    NewDir=dcreate("&date1.","&inpath.");  run;
filename _pipfile pipe "dir &inpath.\*.sas &_pipfg."  ; data _pipfile;   infile _pipfile truncover;   input fname $char1000.;   put fname=;     %if &allYN ne 1 %then %do;  fname="&inpath.\"||strip(fname);  %end;  newfile=strip("&inpath.\&date1.\")||strip(kscan(fname,-1,'\'))||strip('.txt');  call execute(  strip('filename fn')||strip(_n_)||' '||strip(quote(strip(fname)))||' encoding=any  lrecl=30000 ;  filename nf'||strip(_n_)||' '||strip(quote(strip(newfile)))||" lrecl=30000  encoding=&outencoding.;");run;
data _null_;  set _pipfile;   rc=fcopy(strip('fn')||strip(_n_),strip('nf')||strip(_n_));run;
%mend;
%filesas2txt(inpath=D:\日常练习\公众号文章素材\修改SAS程序名,allYN=0,outencoding=utf8);

代码解读

利用systask command删除指定文件夹。删除后程序会创建此文件夹,用来存放转化后txt所在位置。当然在使用systask command时,需要让SAS暂定运行一会,留给systask command命令的执行,故而会让SAS程序的执行睡眠0.5秒。

代码语言:javascript
复制
*获取当前日期;  data _null_;    call symput("date1",left(compress(put("&sysdate"d,yymmdd10.),"-"," ")));  run;*删除文件夹;  systask command "rd /s/q &inpath.\&date1.";*睡眠0.5秒;  data _null_;    rc=sleep(0.5);  run;*创建文件夹;  data _null_;    NewDir=dcreate("&date1.","&inpath.");  run;

接着利用pipe来获取指定路径下的SAS程序,通过/b/s或/b来控制获取的内容,从而来选择是否获取指定路径下的子路径下的程序。利用filename将获取的文件路径及文件名进行赋值。

代码语言:javascript
复制
  %if &allYN eq 1 %then %do;    %let _pipfg=/b/s;  %end;  %else %do;    %let _pipfg=/b;  %end;
filename _pipfile pipe "dir &inpath.\*.sas &_pipfg."  ; data _pipfile;   infile _pipfile truncover;   input fname $char1000.;   put fname=;     %if &allYN ne 1 %then %do;  fname="&inpath.\"||strip(fname);  %end;  newfile=strip("&inpath.\&date1.\")||strip(kscan(fname,-1,'\'))||strip('.txt');  call execute(  strip('filename fn')||strip(_n_)||' '||strip(quote(strip(fname)))||' encoding=any  lrecl=30000 ;  filename nf'||strip(_n_)||' '||strip(quote(strip(newfile)))||" lrecl=30000  encoding=&outencoding.;");run;

利用SAS中的fcopy函数进行转化。

代码语言:javascript
复制
data _null_;  set _pipfile;   rc=fcopy(strip('fn')||strip(_n_),strip('nf')||strip(_n_));run;
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-04,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com