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