Ich habe versucht, eine Liste von Variablen zu generieren, deren Namen in einem Makro & varsnew gespeichert sind. Der Wert der ersten (2., 3. usw.) dieser Variablen ist gleich (a) der 1. (2., 3. usw.) einer anderen Liste von Variablen, deren Namen in einem anderen Makro & varsold gespeichert sind, wenn die Variable in & varsold fehlt nicht, oder (b) 0, wenn die Variable in & varsold fehlt.Coalesce funktioniert nicht in sas Makro?
Der folgende Code funktioniert gut, wo ich If-Then-Klausel verwenden, um Variablen in & Varsnew zu definieren.
%macro coal;
data DS;
set DS;
%do i=1 %to %sysfunc(countw(&varsold.));
if %scan(&varsold.,&i.)<=.z then %scan(&varsnew.,&i.)=0 ;
else %scan(&varsnew.,&i.)=%scan(&varsold.,&i.);
%end;
run;
%mend;
%coal;
Allerdings, wenn ich die coalesce Funktion Variablen in & varsnew zu definieren, wie in der folgenden, dann wird der Code nicht funktioniert. Ich bin verwirrt.
%macro coal;
data DS;
set DS;
%do i=1 %to %sysfunc(countw(&varsold.));
%scan(&varsnew.,&i.)= %sysfunc(coalesce(%scan(&varsold.,&i.),0));
%end;
run;
%mend;
%coal;
Was meinst du mit "funktioniert nicht?" – superfluous
FEHLER: Argument 1 für die Funktion COALESCE, auf die von der Makrofunktion% SYSFUNC oder% QSYSFUNC verwiesen wird, ist keine Zahl. – Jay
Sie müssen 'COALESCEC()' verwenden, wenn Sie Zeichenwerte verwenden. Die Funktion '% SCAN()' gibt einen Variablennamen und keine Zahl zurück. – Tom