专栏首页SAS程序分享号号号SAS-批量修改.sas后缀成.txt

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

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

代码

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

%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秒。

*获取当前日期;  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将获取的文件路径及文件名进行赋值。

  %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函数进行转化。

data _null_;  set _pipfile;   rc=fcopy(strip('fn')||strip(_n_),strip('nf')||strip(_n_));run;

本文分享自微信公众号 - SAS程序分享号号号(xiaocgn),作者:setup

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS-给公众号做一个秩和检验

    嗯,于是小编从公众号上下载了自2017年11月11日-2018年03月25日的公众号每日增粉相关的数据...接着小编就开始分组了,以500人为区间,分成3个组进...

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

    这样做的的好处是啥呢,每次运行数据或者数据集想实现自动存下来,这个时候就可以用SAS自动创建文件夹的方式来存储。

    Setup
  • SAS-爬取帖子下的邮箱,给他们发一封邮件...

    SAS中获取网页上信息的原理其实很简单,就是将网页上的html代码给导入进数据集中,然后利用一定规律来获取自己想要的提取的信息...(目前个人浅显的理解),那么...

    Setup
  • SAP BRF+ Interpretation模式与Generation模式的区别

    可以选择Simulation Mode为Interpretation Mode或者Generation Mode。

    Jerry Wang
  • 日志必须开始写了,记录自己每一天,希望每天进步一点

    自己的每一天都是无法再重新返回过的,当前的每一分一秒都应该有所痕迹。必须有所行动,治愈焦虑吧。 一直想要开始写的博客就从今天开始吧,如果不做点什么,你将永远失去...

    Fiona_
  • 速读原著-UnixLinux基础(六)

    c)打开能平同web服务器(192.168.31.143)机器的浏览器,网址输入192.168.31.143:

    cwl_java
  • 数据分析秘籍在这里:Kaggle 六大比赛最全面解析(上)

    AI 研习社按,Kaggle 上有各式各样的数据挖掘类比赛,很多参赛者也乐于分享自己的经验,从他人的经验中进行总结归纳,对自己的实践也非常重要。

    AI研习社
  • 生物统计学与R极简手册

    生信技能树
  • vue运行报错:SyntaxError: Cannot use import statement outside a module

    王小婷
  • kubernetes 不停机部署应用

    有很多应用是不能中断服务的,这需要我们在部署更新的时候不能够停服,这种方式也叫做zero downtime deployment.

    kubernetes中文社区

扫码关注云+社区

领取腾讯云代金券