数学建模社区-数学中国

标题: 转载 分享 SAS基础宏之1:ChkFile 包括代码实现 [打印本页]

作者: 百年孤独    时间: 2013-7-23 15:24
标题: 转载 分享 SAS基础宏之1:ChkFile 包括代码实现
  在网上看到了一些比较不错的sas 关于宏的资源 希望对大家有用
4 ^! }  ]3 Y5 `' j, w 在此非常感谢 某某论坛的资源共享。
. |; e( X2 H9 T8 W) C0 f9 T# [/ j+ \这个宏是用来检查指定目标文件夹或文件是否存在的,若存在则删除,不存在则创建,用于解决在dos中和SAS中无法创建文件夹的问题
7 \) d* d9 }5 D' r2 G' J3 S+ k例如可以在运行proc export前ChkFile下
% X/ r, j6 u" X9 j3 f/ l5 q: l
; ]4 p4 f$ ~( k%macro ChkFile(OutFilePath);
; ]: I8 P% z" L3 w/**********************************************************************/
$ f; S1 h2 C: l8 u1 y, r/* 此宏的作用是检查指定路径的文件夹或文件是否存在。若指定路径包含文件 */
. j. e1 Y9 \# k! w6 z/* 名,则运行此宏后路径中包含的文件夹存在但文件不存在,方便以后操作; */9 Q& u. x/ z6 i; R( _
/* 若指定路径不包含文件名,则运行此宏后路径中包含的文件夹存在。其中, */' A9 u. ^/ K. m5 k+ m/ w
/* OutFilePath是指定的文件夹或文件路径。注意如果路径中包含文件名,则  */
" u* }# e$ D) B& {  C' r6 H8 R/* 一定要写全文件名和其扩展名。                                       */6 A. H% F9 i8 T2 ~+ y
/*                                                                    */9 n8 _1 ]3 o( p" v- J' N. _- i
/*                                      Created on 2011.9.29          */
4 x% L% p3 R7 b7 Z" x4 i/*                                      Modified on 2011.9.29         */
2 |0 T1 W4 b- x3 b# t! B0 e/**********************************************************************/; u9 g0 ~- P. A2 ^% B
3 V+ a9 M& u/ k- B. M
/* 情形1:当输入参数OutFilePath包含文件名时,注意文件名必须带后缀 */
2 s. c8 K: z, |: k; @( s%if %SYSFUNC(FIND(&OutFilePath,%Str(.))) NE 0 %then %do;
) E4 e* {+ ^/ A7 c9 ?4 p1 k( A        /* 得到OutFilePath中包含的文件名File和文件夹路径Dir */
; M4 A  C( \# h8 u        %let File=%SYSFUNC(SCAN(&OutFilePath,-1,\));
$ R" a' z: b* ?0 \        %let Dir=%SYSFUNC(SUBSTR(&OutFilePath,1,%EVAL(%SYSFUNC(LENGTH(&OutFilePath))-%SYSFUNC(LENGTH(&File)))));
5 ]- x) C9 o5 E% |' `6 `' P7 Z
+ i- R  e1 ~  _1 ~6 O$ t* f        options noxwait;
+ k) z" U6 Y! W: a9 A* A( `% {' a9 T2 M$ v5 x; M0 W6 G  c& F
        %local rc1 fileref1;
# ]5 v- q' P3 r! m6 a        %local rc2 fileref2;1 X) L4 {' o. i2 T- q: j  o
        %let rc1=%SYSFUNC(FILENAME(fileref1,&Dir));; B! T9 q: W; x/ t5 _) p2 c* q: _6 |
        %let rc2=%SYSFUNC(FILENAME(fileref2,&OutFilePath));
  o3 q' T  N6 X, g, e& t" V. C
( S) b0 Z! Q* z% i9 J/ @* h1 b        %if %SYSFUNC(FEXIST(&fileref1)) %then %do;: u/ P* U4 ?2 F, [" P
                %put NOTE: The directory "&Dir" exists.;
- z2 W9 T! s% c9 ~( [1 f                %if %SYSFUNC(FEXIST(&fileref2)) %then %do;                /* 文件夹存在且文件也存在的情形 */
5 m2 O2 M( y3 S* u" J                        %SYSEXEC del &OutFilePath;
) j  O- N# b* X: V3 J                        %put NOTE: The file "&File" also exists, and has been deleted.;
# M$ L0 M& g5 K9 J                        %end;
2 V& W. W) t) Y                %else %put NOTE: But the file "&File" does not exist.;                /* 文件夹存在且文件不存在的情形 */+ F7 @" q' j4 I$ N3 g
                %end;
/ j6 `1 Q! x: ]) x3 {        %else %do;                /* 文件夹不存在的情形 */
8 P$ l) \6 ~) x$ M- ^                %SYSEXEC md &Dir;+ {8 d4 m: U! J$ X9 j
                %put %SYSFUNC(SYSMSG()) The directory has been created.;* x/ [9 f" a2 u( O2 C# K& T
                %end;
$ j& y, k( @) q5 x- N7 k) L4 U9 ?
        %let rc1=%SYSFUNC(FILENAME(fileref1));) q! G& I. |6 }( s* Y* E5 I
        %let rc2=%SYSFUNC(FILENAME(fileref2));! b& L2 D) D- Q9 R/ D- x
%end;
: _* D6 P- W8 W) Y
+ _4 I& S8 q+ A/ Z" @* q/* 情形2:当输入参数OutFilePath不包含文件名时 */1 g, N6 g: J) C$ C5 w: L6 r
%else %do;
+ o+ F4 r2 ]$ C9 k& s        options noxwait;
1 y  D# K6 y' G4 {. w
* F4 C2 W2 L0 g+ k( g- B: T        %local rc fileref;
5 o3 l  p6 L2 S+ x2 x1 d0 d        %let rc=%SYSFUNC(FILENAME(fileref,&OutFilePath));
" m+ }8 `1 F/ ]; a/ P        %if %SYSFUNC(FEXIST(&fileref))  %then
8 ~, ~$ @. `/ o" v; c  H                %put NOTE: The directory "&OutFilePath" exists.;2 u1 G  T4 k! s+ s2 l7 v: I3 u$ s
        %else %do; % V( y" B: m$ r) |2 N! Z
                %SYSEXEC md &OutFilePath;" Y* e5 b  [, q0 a. X; f3 O7 j* N( D
                %put %SYSFUNC(SYSMSG()) The directory has been created.;
/ [; s4 H# q  n+ W0 P4 |                %end; ( z$ F. |& I7 t/ O' ?
        %let rc=%SYSFUNC(FILENAME(fileref));
$ y+ g( X0 X% q$ ]4 N%end;8 Y8 r8 Y- J) ^: U! D* \! \4 V

0 I: V  z6 T& X! P; |%mend;  g2 K" e. C  A2 Z8 s: K
1 I8 E; U2 y0 X' b5 ]) h/ D$ h" W$ u6 O
! l# t/ p( k. f
%macro Demo();
$ u; y. B2 `- }
8 _' ~5 ]8 q$ ]2 ?& I%ChkFile(d:\temp\data.xls);
- N5 z7 @+ Z" f8 L
5 y1 ~+ y6 s- @9 G6 R6 f. N%mend;
# u$ M) h3 i2 H. S% L




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5