数学建模社区-数学中国

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

作者: 百年孤独    时间: 2013-7-23 15:24
标题: 转载 分享 SAS基础宏之1:ChkFile 包括代码实现
  在网上看到了一些比较不错的sas 关于宏的资源 希望对大家有用
9 V- f; R9 J( |, b8 Q 在此非常感谢 某某论坛的资源共享。$ m- o) u  N- t1 @0 Q" _
这个宏是用来检查指定目标文件夹或文件是否存在的,若存在则删除,不存在则创建,用于解决在dos中和SAS中无法创建文件夹的问题
- ^8 T) M4 t: v例如可以在运行proc export前ChkFile下1 ~) S/ x2 `& U4 q

4 A9 N# W$ L( P3 j5 U%macro ChkFile(OutFilePath);2 H; |" @  y. m% o6 u) j: N& E' M
/**********************************************************************/) M4 c# ]3 ]% k2 |" n1 n
/* 此宏的作用是检查指定路径的文件夹或文件是否存在。若指定路径包含文件 */
  W2 N) U; K. |& H" ?5 G% |/* 名,则运行此宏后路径中包含的文件夹存在但文件不存在,方便以后操作; */+ N/ k1 B' i: g* Z1 b% M7 w
/* 若指定路径不包含文件名,则运行此宏后路径中包含的文件夹存在。其中, */  A( D+ O4 f. Y/ ]. |( q4 \; o$ m2 W
/* OutFilePath是指定的文件夹或文件路径。注意如果路径中包含文件名,则  */
4 f, i/ ~- y+ m. J4 h/* 一定要写全文件名和其扩展名。                                       */2 B1 \& W7 U. K3 N& d) y
/*                                                                    */
5 E) ~1 V  h/ ~2 z& s9 c/*                                      Created on 2011.9.29          */
4 i. M* w2 q& y; C* T( [. d5 s/*                                      Modified on 2011.9.29         */- Z9 l  a$ ^: Q; `0 a
/**********************************************************************/
. c  m$ K5 M/ _0 L
- m" U8 g; a, t5 H/* 情形1:当输入参数OutFilePath包含文件名时,注意文件名必须带后缀 *// w9 B9 }0 e' T0 Y
%if %SYSFUNC(FIND(&OutFilePath,%Str(.))) NE 0 %then %do;
" f0 W5 k$ h2 J( n+ l# E' }& y& N        /* 得到OutFilePath中包含的文件名File和文件夹路径Dir */
9 X" @  k# U' k% K- \/ s( Q        %let File=%SYSFUNC(SCAN(&OutFilePath,-1,\));- J: Y- t/ D! H; R6 X0 V
        %let Dir=%SYSFUNC(SUBSTR(&OutFilePath,1,%EVAL(%SYSFUNC(LENGTH(&OutFilePath))-%SYSFUNC(LENGTH(&File)))));& T2 s* J# @8 `4 U( g  v9 }
4 F' t1 Q6 q$ R  w; u3 m% K2 ?
        options noxwait;
0 z; f% a! I" K1 X! x2 I/ a7 B- \+ s& ?! a+ z% P3 T
        %local rc1 fileref1;' O' m" x7 B+ G' w2 N; h# a1 n
        %local rc2 fileref2;9 A0 k' f8 U. Z/ j9 c: I( A# b  |# J
        %let rc1=%SYSFUNC(FILENAME(fileref1,&Dir));
0 X, H0 \2 u, e        %let rc2=%SYSFUNC(FILENAME(fileref2,&OutFilePath));
; P; z3 ^: l* J# I: S  R9 s" X  |3 E" x* o  d' q, K
        %if %SYSFUNC(FEXIST(&fileref1)) %then %do;
. u. ^! ^! E; i                %put NOTE: The directory "&Dir" exists.;
# }; X  n0 A, G$ g( Q+ G: a/ \                %if %SYSFUNC(FEXIST(&fileref2)) %then %do;                /* 文件夹存在且文件也存在的情形 */
3 W4 _8 A9 A5 v: L                        %SYSEXEC del &OutFilePath;
# A' t  t0 [8 b& w3 z                        %put NOTE: The file "&File" also exists, and has been deleted.;( |5 Y5 t) @6 z2 d1 u1 b$ D' g: r. _
                        %end;% K5 j+ Q$ g6 Y  H* L
                %else %put NOTE: But the file "&File" does not exist.;                /* 文件夹存在且文件不存在的情形 */
' P9 M4 S6 e& l1 x& @; }* w                %end;
! D: G& h* Q# K4 M* O4 ^' A9 g2 Z        %else %do;                /* 文件夹不存在的情形 */
! O8 h, |8 p8 V9 {                %SYSEXEC md &Dir;
/ x. S) k% V8 V8 I) e& o                %put %SYSFUNC(SYSMSG()) The directory has been created.;! r7 ^$ r! _4 W3 d% B3 Z
                %end;
9 _* ~$ @* G* A# b+ N9 i8 s
% |8 [; A( F6 K; c+ v. |        %let rc1=%SYSFUNC(FILENAME(fileref1));
  w! e6 J3 R$ O) e: c/ G        %let rc2=%SYSFUNC(FILENAME(fileref2));- G  k" p1 {& K+ h8 r0 |/ @6 a
%end;1 D- e/ B1 D% F; f  _- _

1 y$ }3 i1 R9 d3 V9 i/* 情形2:当输入参数OutFilePath不包含文件名时 */0 l4 i8 J, Q/ \% T
%else %do;0 C/ E1 F  T  W+ i* P# j( V* k  f
        options noxwait;" `+ X( M% J$ {; ?; S3 e, e
6 P- O9 S3 L. i; H% H( V
        %local rc fileref;; t0 K$ v  _% S9 O8 j0 _5 h
        %let rc=%SYSFUNC(FILENAME(fileref,&OutFilePath));; |$ P/ E: T+ K9 j8 o0 l' T
        %if %SYSFUNC(FEXIST(&fileref))  %then* {% u6 n. O/ U* B4 L
                %put NOTE: The directory "&OutFilePath" exists.;
* c, k* W$ o4 e; y1 W        %else %do; - C/ B7 _" @# e4 P; H- o
                %SYSEXEC md &OutFilePath;% ]2 g( s4 `) k: v* e$ v3 u
                %put %SYSFUNC(SYSMSG()) The directory has been created.;, Q# g9 E. s; |6 z4 l
                %end; ! y& Q1 d. p7 m' c% o. F
        %let rc=%SYSFUNC(FILENAME(fileref));
/ `# t! z5 ~4 h$ p+ Z% D# d%end;
% j+ j% d, \' V( m" S4 I& v* g! ?" a
%mend;7 v) p4 E/ ]* d# Q# K- y9 d
- A) y. L9 t' a& \3 t9 T+ h
  W' I3 f  y  M. j' ]- Q" U- a7 I
%macro Demo();8 i9 v' f) B8 |3 C# X
% i; o$ x6 }" D& }& u- z
%ChkFile(d:\temp\data.xls);8 {- s" A9 z' g5 I, E! `

; H% y. W- K5 G9 y$ K1 n%mend;
: s+ v) G- B) A; f




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