SAS基础宏之19:GetFileAndSubDirInfoInDir-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

SAS软件培训

>>

SAS基础宏之19:GetFileAndSubDirInfoInDir

SAS基础宏之19:GetFileAndSubDirInfoInDir

发布:playmore | 分类:SAS软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

获取电子版《CDA一级教材》

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

作用是取得一个文件夹下所有文件和文件夹的信息%macroGetFileAndSubDirInfoInDir(InDirPath,Filter,TargetTable,OutFilePath,Expand);/**********************************************************************//*此 ...
免费学术公开课,扫码加入


作用是取得一个文件夹下所有文件和文件夹的信息
  1. %macro GetFileAndSubDirInfoInDir(InDirPath,Filter,TargetTable,OutFilePath,Expand);
  2. /**********************************************************************/
  3. /* 此宏用于获得目标文件夹下所有文件及子文件夹的信息,并将此信息保存至 */
  4. /* SAS表格或导出至txt文件中。其中,InDirPath是指定的目标文件夹路径,*/
  5. /* 路径最后要加上\;Filter是文件过滤设置,支持*和?通配符,若需要导出*/
  6. /* 所有文件列表,可以设置为空;TargetTable是保存文件信息的SAS表格,若 */
  7. /* 不需要生成,可以设为空;OutFilePath是导出txt文件的路径,若不需要导 */
  8. /* 出,可以设为空;Expand是标记变量,=Yes表示展开所有文件夹,列表最后 */
  9. /* 包含文件及其所处文件夹信息,=NO表示只列出目标文件夹下第一层文件和*/
  10. /* 文件夹的信息。 */
  11. /* */
  12. /* 最终得到的是含有目标文件夹下所有文件及子文件夹信息的SAS表格和存于*/
  13. /* 指定路径的txt文件。 */
  14. /* */
  15. /* 注意运行此宏可能会产生数量不等的错误信息,这是由于利用DIR命令得到*/
  16. /* 结果表格纵向格式不一致引起的,但不会影响结果的正确性。 */
  17. /* */
  18. /**********************************************************************/
  19. /* 确保InDirPath后接\符号 */
  20. %if %SYSFUNC(FIND(%SYSFUNC(REVERSE(&InDirPath)),\)) NE 1 %then %let InDirPath=&InDirPath.\;
  21. /* 关闭显示LOG信息 */
  22. options nosource nonotes errors=0;
  23. /* 第一步:首先将InDirPath文件夹下所有文件的信息导出至OutFilePath文件中 */
  24. /* 情形1:参数OutFilePath为完整文件路径情形 */
  25. %if %SYSFUNC(FIND(&OutFilePath,%STR(.))) NE 0 %then %do;
  26. /* 情形1-1:展开所有文件夹 */
  27. %if %UPCASE(&Expand) EQ YES %then %do;
  28. %ChkFile(&OutFilePath);
  29. options noxwait xsync;
  30. x "dir &InDirPath.&Filter /s /a > &OutFilePath";
  31. %end;
  32. /* 情形1-2:不展开文件夹,只包含第一层子文件夹和文件的信息 */
  33. %else %if %UPCASE(&Expand) EQ NO %then %do;
  34. %ChkFile(&OutFilePath);
  35. options noxwait xsync;
  36. x "dir &InDirPath.&Filter > &OutFilePath";
  37. %end;
  38. /* 情形1-3:错误输入Expand参数情形 */
  39. %else %do;
  40. %put ERROR: The last parameter should be Yes or No, case insensitive and without quotes.;
  41. %goto exit;
  42. %end;
  43. %end;
  44. /* 情形2:参数OutFilePath为空情形 */
  45. %else %if %UPCASE(&OutFilePath) EQ %STR() %then %do;
  46. /* 情形2-1:展开所有文件夹 */
  47. %if %UPCASE(&Expand) EQ YES %then %do;
  48. options noxwait xsync;
  49. x "dir &InDirPath.&Filter /s /a > d:\GFASDIID_temp.txt";
  50. %let OutFilePath=d:\GFASDIID_temp.txt;
  51. %end;
  52. /* 情形2-2:不展开文件夹,只包含第一层子文件夹和文件的信息 */
  53. %else %if %UPCASE(&Expand) EQ NO %then %do;
  54. options noxwait xsync;
  55. x "dir &InDirPath.&Filter > d:\GFASDIID_temp.txt";
  56. %let OutFilePath=d:\GFASDIID_temp.txt;
  57. %end;
  58. /* 情形2-3:错误输入Expand参数情形 */
  59. %else %do;
  60. %put ERROR: The Expand should be Yes or No, case insensitive and without quotes.;
  61. %goto exit;
  62. %end;
  63. %end;
  64. /* 情形3:错误输入OutFilePath参数情形 */
  65. %else %do;
  66. %put ERROR: The OutFilePath should contain the full path of directory, including filename and filename extension.;
  67. %goto exit;
  68. %end;
  69. /* 第二步:接着将OutFilePath文件的信息导入SAS数据表中 */
  70. /* 需要生成SAS数据表情形 */
  71. %if %UPCASE(&TargetTable) NE %STR() %then %do;
  72. /* 情形1:展开所有文件夹,此时从第4行开始读 */
  73. %if %UPCASE(&Expand) EQ YES %then %do;
  74. data GFASDIID_temp;
  75. infile "&OutFilePath." firstobs=4 truncover;
  76. input DataString $ 1-100 @; /* 读取的第一个变量,变量长度为10,@表示光标不下移,继续读取此行 */
  77. input @1 Date YYMMDD10. @13 Time TIME. @19 Bytes_temp $17. @37 FileName $64.;
  78. if (FIND(DataString,'<DIR>') EQ 0) AND (FIND(DataString,'\') NE 0 OR Date NE .);
  79. format Date YYMMDD10. Time HHMM.;
  80. run;
  81. data &TargetTable(drop=DataString Bytes_temp);
  82. retain Date Time Bytes FileName DirPath;
  83. set GFASDIID_temp;
  84. Bytes=INPUT(Bytes_temp,COMMA17.);
  85. format Bytes COMMA17.;
  86. if FIND(DataString,'\') NE 0 then DirPath=COMPRESS(DataString,'的目录');
  87. if Date NE .;
  88. run;
  89. %end;
  90. /* 情形2:不展开文件夹,只包含第一层子文件夹和文件的信息,此时从第8行开始读 */
  91. %else %do;
  92. data GFASDIID_temp(drop=DataString);
  93. infile "&OutFilePath" firstobs=8 truncover;
  94. input DataString $ 1-10 @; /* 读取的第一个变量,变量长度为10,@表示光标不下移,继续读取此行 */
  95. input @1 Date YYMMDD10. @13 Time TIME. @19 Bytes_temp $17. @37 FileName $64.;
  96. if Date NE .;
  97. format Date YYMMDD10. Time HHMM.;
  98. run;
  99. data &TargetTable(drop=Bytes_temp);
  100. retain FileName Dir Bytes Date Time;
  101. set GFASDIID_temp;
  102. Bytes=INPUT(Bytes_temp,COMMA17.);
  103. format Bytes COMMA17.;
  104. if Bytes EQ . then Dir='<DIR>';
  105. else Dir='';
  106. run;
  107. %end;
  108. %end;
  109. /* 如需要在SAS的Output窗口中打印文件列表,请取消如下注释 */
  110. /*proc print data=&TargetTable;*/
  111. /*title1 "Files identified through saved file";*/
  112. /*run;*/
  113. /* 删除不必要的表格 */
  114. proc delete data=GFASDIID_temp;
  115. run;
  116. /* 恢复显示LOG信息 */
  117. options source notes errors=5;
  118. %if &OutFilePath=d:\GFASDIID_temp.txt %then x "erase d:\GFASDIID_temp.txt";
  119. %exit:
  120. %mend;

  121. %macro Demo();
  122. %let InDirPath=e:\Works\;
  123. %let Filter=*.sas;/* 文件过滤设置,若需要导出所有文件列表,则设置为空即可,即Filter=; */
  124. %let TargetTable=FileList;/* 若不需要生成包含文件列表的SAS表格,则设为空,大小写不敏感 */
  125. %let OutFilePath=;/* 若不需要导出文件列表txt文件,则设为空,大小写不敏感 */
  126. %let Expand=Yes;/* =Yes表示展开所有文件夹,列表最后包含文件及其所处文件夹信息,否则=No,大小写不敏感 */
  127. %GetFileAndSubDirInfoInDir(&InDirPath,&Filter,&TargetTable,&OutFilePath,&Expand);
  128. %mend;
复制代码
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-2946317-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
数据分析师 人大经济论坛 大学 专业 手机版
联系客服
值班时间:工作日(9:00--18:00)