背景
SASでデータセットを作成して実験を繰り返しながら機械学習モデルを開発する際に、バージョンごとに毎回フォルダをエクスプローラーでポチポチ作成するのが面倒なので、マクロで自動作成したい。
このとき、ver指定を更新し忘れた場合に、既存のフォルダが新規で作成され上書きされるのを回避したい。
作成したいフォルダ
dev
├─ input ・・・ 元データを格納、ここはバージョンによらず共通
└─ ver ・・・ 開発用のバージョン
├─ log ・・・ ログファイルの格納用
├─ process ・・・ 中間データセットの格納用
└─ output ・・・ 機械学習モデルに読み込ませるCSVの格納用
作成したいのは上記のようなイメージで、verとその配下のフォルダを作成するマクロを組みたい。
作成したマクロ
/*--- バージョン設定 ---*/
%let ver = v01;
/*------------------*/
libname dev "開発の起点となるフォルダのパス";
/* フォルダ作成のマクロ */
%macro create_folders(ver);
%let check_folder_path = %sysfunc(pathname(dev))\&ver.;
%if %sysfunc(fileexist(&check_folder_path.)) %then %do;
%put フォルダはすでに存在します;
%end;
%else %do;
%let d1 = %sysfunc(dcreate(&ver., %sysfunc(pathname(dev))));
%let d2 = %sysfunc(dcreate(log, %sysfunc(pathname(dev))\&ver.));
%let d3 = %sysfunc(dcreate(process, %sysfunc(pathname(dev))\&ver.));
%let d4 = %sysfunc(dcreate(output, %sysfunc(pathname(dev))\&ver.));
%put フォルダが作成されました;
%end;
%mend create_folders;
/* 実行 */
%create_folders(&ver.);