Existe-t-il une manière intelligente d'utiliser la fonction MOD (,)
lors de la définition des variables macro?
Par exemple, considérez ceci:
data _null_; input_year=2015; input_dec =mod(input_year,100); %LET year=input_year; %LET dec = input_dec; put &dec. 'and ' &year.; run;
Où dec
ne contiendra que les deux derniers chiffres de l'année. Cela ne fonctionnera pas (la même chose avec SYSEVAL
), car la fonction % EVAL
ne peut pas accéder correctement à la fonction MOD
.
Je ne veux pas inclure de DATA STEP
, mais le résultat devrait en fait être quelque chose comme ceci:
%LET year=2015; %LET dec = %EVAL(mod(&year.,100));
Le problème ici est que le Les variables macro ne peuvent pas être appelées en dehors de la DATA STEP
(peut-être ai-je fait quelque chose de mal? Même l ' option globale
ne fait pas l'affaire).
Un peu de contexte:
Dans un fichier autoexec
existant, l'utilisateur doit modifier certaines entrées, en fonction de l'année, toutes ensemble, 3 macro-variables doivent être adaptées (année, déc et année de suivi). Mon idée était de déduire les autres changements à partir d'une seule entrée, l'année.
3 Réponses :
% eval
et % sysevalf
sont utilisés pour faire des calculs sur des nombres, en dehors d'une étape de données. Lorsque vous utilisez des fonctions, vous avez besoin de %sysfunc
%LET year=2015; %LET dec = %sysfunc(mod(&year.,100)); %put &=dec. and &=year.;
Super, ça marche! Je ne sais pas pourquoi je n'ai pas repéré la fonction % sysfunc
dès le début. Merci!
Vous devez utiliser SYSFUNC () pour utiliser des fonctions dans la syntaxe de macro. SUBSTR fonctionnera également.
%let next_year = %eval(&year + 1); %let next_year_index = %eval(&index + 1); %put Next Year: &next_year.; %put Next Year Index: &next_year_index;
% EVAL () fonctionne pour les calculs mathématiques, tels que:
%let year=2015; %let index = %sysfunc(substr(&year, 3, 2)); %put &year; %put &index.;
Reeza a fourni une belle solution qui est absolument correcte. Je l'étendrais par deux commentaires:
1. Vous pouvez trouver des fonctions comme% SUBSTR dans SAS, mais celles-ci fonctionnent uniquement sur les macrovariables ; ils ne remplacent pas % sysfunc (substr ())
, au contraire.
2. Il est utile de prendre une minute et de parcourir la liste des macrofonctions, c'est-à-dire celles qui commencent par le signe pour cent: vous verrez qu'à part% EVAL (), il y a aussi% SYSEVALF (). La liste est ici a>.