%sysfuncを使用してCATT()関数を呼び出す場合、式の評価を停止する方法はありますか?
たとえば、次のコードが与えられます。
%let date=10-13-2015;
%put %sysfunc(catt(The date Is:,&date));
私はそれを返したいです:
The date Is:10-13-2015
2015年10月13日は単なるテキスト文字列だからです。ただし、代わりにCATT()はハイフンを減算記号と見なし、数値式として評価して、次の値を返します。
The date Is:-2018
マクロ引用を試しましたが、何も変更されていません。CATT()から値を非表示にする必要があるためだと思います。CATTの引数が式のように見える場合は、そのように扱われます。
もう一つの例:
%let value=2 and 3;
%put %sysfunc(catt(The value Is:,&value));
The value Is:1
そうすることができれば、コンマを削除するだけです-個々のパラメータに区切る必要はありません(次ではcatx()
なく使用している場合を除く)catt()
。
%let date=10-13-2015;
%put %sysfunc(catt(The date Is: &date));
個人的には、日付をSAS日付値として保存し、の2番目の(オプションの)パラメーター%sysfunc
を使用してフォーマットを適用するのが最善の方法だと思います。これにより、柔軟性が向上します。
%let date = %sysfunc(mdy(10,13,2015));
%put The date Is: %sysfunc(sum(&date),mmddyyd10.);
あなたが元のアプローチに固執し、を使用しているcatx()
場合、私はそれを正確に行う方法がわかりません。私が得ることができた最も近い方法は、テキストを挿入して式として解釈できないようにし、その後、を使用してそのテキストを削除することtranwrd
でした。かなり、醜い、そしてそれはスペースを残します:
%let date=10-13-2015;
%let tmp=%sysfunc(catx(#, The date Is: , UNIQUE_STRING_TO_REMOVE&date ));
%let want=%sysfunc(tranwrd(&tmp, UNIQUE_STRING_TO_REMOVE, ));
%put &want;
与える:
The date Is:# 10-13-2015
また、マクロ引用のすべての組み合わせを試し、SAS関数リスト全体をスキャンしましたが、他の実行可能なオプションは見つかりませんでした。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加