4

リテラルの日付(例: '31may2011'd)をパラメーターとして受け取るSASマクロを作成したいと思います。マクロ内で、これをSAS日付値(例:18778)に変換したいと思います。

%macro transLiteralDate2Value(literal=);  
  %put literal = &literal.;  
  %put sasdatavalue = ???;  /* how to calculate this value ? */  
%mend;  
%transLiteralDate2Value(literal='31may2011'd);

これを達成するためのエレガントな方法はありますか?もちろん、リテラル文字列を解析することでこれを行うこともできますが、もっと良い方法があるはずだと思います。

SAS9.1.3を使用しています

4

3 に答える 3

3

これは、マクロの内部または外部で機能します。%sysfunc()には、出力値をフォーマットできる便利なオプションの2番目のパラメーターがあることを忘れないでください。

%let report_date = %sysfunc(sum('01JAN2011'd),best.);

また

%let report_date = %sysfunc(putn('01JAN2011'd,best.));

乾杯ロブ

于 2011-04-25T23:05:08.290 に答える
2

%sysfuncマクロ関数を使用してこれを行うことができます。

%macro transLiteralDate2Value(literal=);  
  %put literal = &literal.;  
  %put sasdatavalue = %sysfunc(putn(&literal.,8.));
%mend;
%transLiteralDate2Value(literal='31may2011'd);
于 2011-04-21T08:43:37.817 に答える
2

以下の私のような単純な変換マクロのペアがあると便利です。私のsas-l投稿も参照してください。

%macro date2num(date, informat=anydtdte.);
  %*-- strip quotations and postfix d from date literal if any. --*;
  %*-- quotations are intentionally doubled to prevent unmatched error --*;
  %let date=%sysfunc(prxchange(s/[''""]d?//i,-1,&date));
  %sysfunc(inputn(&date,&informat))
%mend  date2num;

%macro num2date(num, format=date10., literal=1);
  %local n;
  %let n = %sysfunc(putn(&num,&format));
  %if &literal %then "&n"d; %else &n;
%mend  num2date;
于 2011-04-22T18:48:23.653 に答える