私は変換しようとしている以下のコードでこの圧縮関数に苦労しています。SASの日付マクロと圧縮関数
古いコード(このコードは動作し、以下の結果を返す)
data _null_;
%let startdt='2015/11/1';
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
このコードは、2015年11月1日として2015年11月1日と関数datenumとしてマクロ変数startdtの値を返します。
私は、日付のマクロ変数を使用して同様の機能を実現しようとしています。
新しいコード:(このコードは私にエラーを与え、私は理由を理解することはできませんよ)
data _null_;
dt = date();
last_mth_beg = intnx('month',dt,-1,'beginning');
call symput('startdt',put(last_mth_beg,YYMMDDS10.));
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
私はこの新しいコードを実行すると、私はエラーを取得しています。私は古いコードのように結果を得たいと思います。 助けてください。ありがとうございました!
見るあなたの '%LET'移動と '%PUT'ステートメントをデータステップの前または後のいずれかに追加することができます。これはSASがそれらを評価するときにコードを読みやすく理解しやすくするからです。データステップの途中にそれらを置くと、データステップが実行されている間にどのように評価されているかのように見えますが、これは当てはまりません。これで問題は解決しますか? – Tom
こんにちは、それでも問題は解決しません。エラーは、letステートメントを持たない「新規コード」にあります。ありがとう! – PJay
2番目のデータステップもうまく動作するはずですが、 '%PUT'ステートメントを' run; 'ステートメントの後に移動する必要があります。それ以外の場合は、マクロ変数が存在しない、あるいは悪いことに、データステップが実行される前の値を表示するというエラーが生成されます。 – Tom