- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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
Akzeptierte Lösungen
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
Aber die Parameter ergeben genau das erwünschte Ergebnis in einen einzelnen Aufruf.
https://communities.sas.com/t5/SAS-Programming/Macro-function-to-return-a-list-of-variables-in-a-tab...
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
ich werde mir das Makro einmal anschauen.
VG, Wolfgang
- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Anstößigen Inhalt melden
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.