SASマクロ フォルダの操作

【SAS】存在しない中間フォルダも含めて指定したパスを作成する(DCREATE)

1.展開例

「C:\Blog\SAS\dcreate」の直下にdir1、dir2、dir3を階層順に作成する例です。

%dcreate(C:\Blog\SAS\dcreate\dir1\dir2\dir3);

以下のように、存在しない中間フォルダも含めて、指定したパスが作成されます。
dcreate
 

2. 参考プログラム

以下は、参考プログラムになります。
右上のコピーボタンを押せば、プログラム全体をコピーできます。

%macro dcreate(dir);
%put --------------------------------------------------;
%put dcreate;/*存在しない中間フォルダも含めて指定したパスを作成する*/
%put &=dir;  /* ディレクトリを指定 */
%put --------------------------------------------------;
	%let __i=1;
	%do %while(%qsysfunc(kscan(%superq(dir), &__i, \)) ne);
		%if &__i=1 %then %do;
			%if %substr(%superq(dir), 1, 2)=\\ %then
				%let __xdir=\\%qsysfunc(kscan(%superq(dir), &__i, \));
			%else
				%let __xdir=%qsysfunc(kscan(%superq(dir), &__i, \));
			%let __i=%eval(&__i + 1);
		%end;
		%else %do;
			%let __xdir=%superq(__xdir)\%qsysfunc(kscan(%superq(dir), &__i, \));
			%let __i=%eval(&__i + 1);
		%end;

		%if &__i>3 %then %do;
			%let __folder=%qsysfunc(kscan(%superq(__xdir), -1, \));
			%let __dir=%substr(%superq(__xdir), 1, %length(%superq(__xdir)) - %length(%superq(__folder)));
			%if %qsysfunc(fileexist(%superq(__dir))) %then %do;
				%let rc=%qsysfunc(dcreate(%superq(__folder), %superq(__dir)));
			%end;
			%else
				%put ERROR: ディレクトリが存在しません。_dir=%superq(__dir);
		%end;
	%end;
%mend dcreate;