いつも大変お世話になっております。
以下のようにpath1,path2の2つの絶対パスがあったとします。
%let path1=D:\adam\programs;
%let path2=D:\adam\datasets;
path1がカレントフォルダで、path2が対象とするフォルダのイメージなのですが、
このときpath1から見たpath2の相対位置を簡単に自動で返す関数などは
ございますでしょうか。
戻り値は"..\datasets"のように返って来ましたら有難いです。
分かりましたらご教示のほどよろしくお願いいたします。
関数はないように思います。
もしDATAステップで実施するなら、SCAN、SUBSTR、INDEX関数などで共通部分を削除し
COUNT、CAT関数などで繰り返し"..\"を補うようなロジックで可能かなと思います。
うまくいかない時は、作成したコードをポストしてみてください
関数はないように思います。
もしDATAステップで実施するなら、SCAN、SUBSTR、INDEX関数などで共通部分を削除し
COUNT、CAT関数などで繰り返し"..\"を補うようなロジックで可能かなと思います。
うまくいかない時は、作成したコードをポストしてみてください
yu_sasさま
早速にも有難うございました。
やはり関数はないですか。
それでは何とかDATAステップで作ってみたいと思います。
有難うございました。
追記:
以下で示した方法ですが、取得する相対パスの文字数が79バイト以上になる場合、
パスが79バイトずつ分割されて別々のオブザベーションに格納されちゃいました。
何かオプションを追加すれば行けると思いますが、ちょっと簡単に調べられませんでした。ご注意くださいませ。。
---------------------------
こんにちは。
関数は無いですが、windowsでpowershellが使える環境でしたら以下のようにfilenameのpipeエンジン使って相対パスを取得する事は出来るかと思います。
%let path1=D:\adam\programs;
%let path2=D:\adam\datasets;
filename test pipe "powershell -command push-location %bquote(')&path1%bquote('); resolve-path %bquote(')&path2%bquote(') -relative";
data out1;
infile test lrecl=2000;
input;
length rel_path $2000.;
rel_path = _infile_;
run;
amatsuさま
素晴らしいプログラムを有難うございました!
バッチリ相対パスが取得できました!
追記:
---------------------------
amatsuさま
わざわざご丁寧にも追記下さりありがとうございました。
相対パスの文字数が79バイト以上にならない環境で使用させていただきます。
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!