目次
1.展開例
ディレクトリ「C:\Users\●●●●●\Desktop」に保存してあるプログラム上で、展開した例になります。
%getdir(dir, 0);
展開すると、以下のようなログが出力されます。
上記の展開例だと、「C:\Users\●●●●●\Desktop」に保存してあるプログラム上で、パラメータに「directory=dir」、「hierarchy=0」を指定しているので、グローバルマクロ変数「dir」に、相対0のパス「C:\Users\●●●●●\Desktop」が格納されてます。
その他の引数の設定例は以下になります。
「%getdir(dir, 1);」で展開すると「dir=C:\Users\●●●●●」、
「%getdir(dir, 2);」で展開すると「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;