Hallo zusammen,
kennt jemand einen schlanken Weg, in einem von der Struktur her "unbekannten" SAS-Dataset alle Character Variablen in DoubleQuotes (zB. ABD -> "ABD") einzubetten?
"Unbekannt" deswegen, weil ich das auf viele Datasets in einem call execute über eine Steuerliste anwenden möchte, ohne sie mir einzeln anschauen zu müssen.
VG
Wolfgang
Hier nun die luxuriöser Lösung:
%macro gaensefuss(M_datei);
proc contents
data =&M_datei.
out= char_vari (keep= name type)
noprint;
run;
proc sql noprint;
select name
into :M_variliste
separated by ' '
from char_vari
where type = 2;
quit;
data d1;
* die Länge hoch genug setzen;
format &M_variliste. $20.;
set &M_datei.;
array char [*] _character_;
do i_char= 1 to dim(char);
char(i_char)=compbl('"'!!char(i_char)!!'"');
end;
drop i_char;
run;
%mend gaensefuss;
%gaensefuss(sashelp.class);
gruß eric
Hallo Wolfgang,
im Prinzip so:
data d1;
format Name Sex $20.;
set sashelp.class;
array char [*] _character_;
do i_char= 1 to dim(char);
char(i_char)=compbl('"'!!char(i_char)!!'"');
end;
drop i_char;
run;
Einziger Schönheitsfehler:
Die Länge der Charactervariabeln wird länger.
Das heißt die Variablen musst du vorher auslesen auf eine Makrovariablenliste schreiben und die Länge über format erhöhen, so dass es passt.
lg eric
Hier nun die luxuriöser Lösung:
%macro gaensefuss(M_datei);
proc contents
data =&M_datei.
out= char_vari (keep= name type)
noprint;
run;
proc sql noprint;
select name
into :M_variliste
separated by ' '
from char_vari
where type = 2;
quit;
data d1;
* die Länge hoch genug setzen;
format &M_variliste. $20.;
set &M_datei.;
array char [*] _character_;
do i_char= 1 to dim(char);
char(i_char)=compbl('"'!!char(i_char)!!'"');
end;
drop i_char;
run;
%mend gaensefuss;
%gaensefuss(sashelp.class);
gruß eric
Hallo Eric,
danke für den Tipp, ich musste es allerdings etwas anders lösen, da ich das im Call Execute. Dort ist es mit '"', also ungepaarten Quotes immer etwas schwierig.
Das mit den double quotes habe ich nun hinbekommen, allerdings macht der anschließende Proc Export Zicken.
Dazu habe ich einen weiteren Post aufgemacht.
VG
Wolfgang
Use the QUOTE() function.
You might also need to change the LENGTH of the character variables so there is room to store the extra characters.
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.