数学建模社区-数学中国
标题:
转载 分享 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