SASマクロ フォルダの操作

【SAS】プログラム実行環境のディレクトリパス(相対パス)の自動取得(GETOPTION、SYSGET)

1.展開例

ディレクトリ「C:\Users\●●●●●\Desktop」に保存してあるプログラム上で、展開した例になります。

%getdir(dir, 0);

展開すると、以下のようなログが出力されます。
getdir_log

上記の展開例だと、「C:\Users\●●●●●\Desktop」に保存してあるプログラム上で、パラメータに「directory=dir」、「hierarchy=0」を指定しているので、グローバルマクロ変数「dir」に、相対0のパス「C:\Users\●●●●●\Desktop」が格納されてます。

 
その他の引数の設定例は以下になります。

「%getdir(dir, 1);」で展開すると「dir=C:\Users\●●●●●」、
「%getdir(dir, 2);」で展開すると「dir=C:\Users」になります。

 

2. 参考プログラム

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

%macro getdir(directory, hierarchy);
%put --------------------------------------------------;
%put getdir;
%put プログラム実行環境のディレクトリパス(相対パス)の自動取得;
%put &=directory;	/*ディレクトリを格納するグローバルマクロ変数名を指定する*/
%put &=hierarchy;	/*実行するプログラム自身のディレクトリを0階層とした場合、相対的に何階層上までを格納するかを指定する*/
%put --------------------------------------------------;

	/*グローバルマクロ変数の定義*/
	%global &directory;

	/*プログラムのフルパスの取得*/
	%let &directory=%sysfunc(getoption(sysin));
	%if %length(%superq(&directory))=0 %then %let &directory=%sysget(sas_execfilepath);

	/*取得対象ディレクトリパスの格納*/
	%do _i=1 %to %eval(&hierarchy.+1);
    	%let &directory=%trim(%qsysfunc(tranwrd(%superq(&directory),\%sysfunc(kscan(%superq(&directory),-1,\)),)));
	%end;

	/*確認*/
	%put &directory=%superq(&directory);

%mend getdir;