LesezeichenAbonnierenRSS-Feed abonnieren
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.

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

1 AKZEPTIERTE LÖSUNG

Akzeptierte Lösungen
E_Berger
Fluorite | Level 6

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

Lösung in ursprünglichem Beitrag anzeigen

6 ANTWORTEN 6
E_Berger
Fluorite | Level 6

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

E_Berger
Fluorite | Level 6

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

WolfgangHornung
Obsidian | Level 7

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

DavePrinsloo
Pyrite | Level 9
Versuche macro Ut_varlist. Sie müssen das Macro einmal rünterlafen und speichern
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...
WolfgangHornung
Obsidian | Level 7
Danke Dave,
ich werde mir das Makro einmal anschauen.
VG, Wolfgang
Tom
Super User Tom
Super User

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.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Diskussionsstatistiken
  • 6 Antworten
  • 840 Aufrufe
  • 0 Kudos
  • 4 in Unterhaltung