4 votes

Transformer un paramètre de date littérale en valeur de date SAS dans une macro

Je veux créer une macro SAS qui prend une date littérale (par exemple, '31mai2011'd) comme paramètre. Dans la macro, je veux transformer cette date en une valeur de date SAS (par exemple, 18778).

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

Existe-t-il un moyen élégant d'y parvenir ? Bien sûr, je pourrais le faire en analysant la chaîne littérale, mais je pense qu'il doit y avoir un meilleur moyen.

J'utilise SAS 9.1.3

3voto

Robert Penridge Points 3123

Cela fonctionne à l'intérieur ou à l'extérieur d'une macro. N'oubliez pas que %sysfunc() possède un second paramètre optionnel très pratique qui vous permet de formater la valeur de sortie.

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

o

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

Cheers Rob

2voto

Laurent de Walick Points 2136

Vous pouvez le faire en utilisant la fonction macro %sysfunc.

%macro transLiteralDate2Value(literal=);  
  %put literal = &literal.;  
  %put sasdatavalue = %sysfunc(putn(&literal.,8.));
%mend;
%transLiteralDate2Value(literal='31may2011'd);

2voto

Chang Chung Points 1583

Il est pratique d'avoir une paire de macros de conversion simples comme la mienne ci-dessous. Voir aussi mon poste 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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X