Data Steps in Makro mit symput

Hallo,

ich ermittle mit dem Befehl count(variable,',') die Anzahl der Kommas innerhalb des Strings. Mit dieser Zahl will ich weiterarbeiten, und zwar so, dass ich so viele neue Datensätze erzeugen will, wie viel Kommas in dem String vorhanden sind. Es sollte mit symput und do funktionieren, aber ich weiß nicht wie. Kann mir jemand dabei helfen?

Viele Grüße,

Melinda Bede

ohne Makro

Was mit "Data Steps in Makro mit symput" gemeint ist, weiß ich nicht.
Vielleicht hilft dieses:

data string;
   
input string $20.;
datalines;
aaa,bb,ccc,d
;

data strings(drop=instring);
   
set string(rename=(string=instring));
   n=
1;
   
length string $20;
   
do while(scan(instring,n,',') ne '');
      string = scan(instring,n,
',');
      
output;
      n=n+
1;
   
end;
run;
Einfacher ist es oft, wenn man schon ein Beispiel für den Input und den Output hätte. Sonst muss man raten, was genau gemeint ist.

Hallo,so was Ähnliches

Hallo,

so was Ähnliches will ich machen.
Ich habe folgende Strings innerhalb einer Spalte:

var
1,2,3,5
1,4,7
1,8,9,7,6

Diese einzelnen Werte will ich in einzelne Spalten schreiben, so:
var1 var2 var3
1 2 3
usw.
Vielleicht braucht man dazu kein Makro. Ich habe schon recherchiert, aber nichts gefunden...

Die Scan-Funktion macht es

DATA test1;
   
INPUT string $20.;
DATALINES;
1,2,3,5
1,4,7
1,8,9,7,6
;

DATA test2 (DROP=i);
   
SET test1;
   
/* ARRAY definieren, alle Elemente mit Länge $ 10 */
   
ARRAY s (10) $ 10 string1-string10;
   
DO i=1 TO 10;
      
/* String zerlegen und in Array einfüllen */
      
s (i) = scan (string, i, ',');
   
END;
RUN;
Diese Beispiel ist anwendbar, wenn die Strings in einer Variablen stehen. Etwas anderes ist es noch, wenn die Strings nicht in einer Variablen, sondern in einer Datei stehen. Dann kann man mit den Anweisungen INFILE und INPUT arbeiten.

Danke! Und noch eine Frage...

Hallo,

erst jetzt als ich diese Beiträge durchgelesen habe, ist mir aufgefallen, dass ich mich für die Antwort gar nicht bedankt habe...
DANKE! Es hat sehr viel geholfen.
Diesbezüglich hätte ich eine weitere Frage.
Das Problem bezieht sich wieder auf arrays (glaube ich zumindest). Ich habe einen Datensatz mit unter anderem den Variablen var1, var2, var3,etc. die ähnliche Ausprägungen enthalten können:

var1   var2   var3
12h    45f    74r
74r
98i    12h    45f
Wenn z.B. die Ausprägung "12h" in den Variablen var1-var3 vorkommt, soll eine neue Variable neu mit der Ausprägung "xxx" gebildet werden. Dann soll es weitergesucht werden: wenn die Ausprägung "12h" in einer Zeile nicht vorkommt, dann soll nach der Ausprägung "45f" gesucht und der Variable neu die Ausprägung "yyy" gegeben werden, usw.
Leider habe ich keine Ahnung wie ich es programmieren soll. Hat jemand eine Idee?

Viele Grüße,
Melinda Bede

mit mehreren Arrays

/* Beispieldaten */
data test;
   
infile datalines missover;
   
input var1 $ var2 $ var3 $;
datalines;
12h    45f    74r
74r    45f
45f

45f    12h    
74r    75t    99a
98i    99ah   45f
;

/* umordnen der Daten */
data ordnen(drop=i j);
   
set test;
   
/* Quellvariablen */
   
array vars   {3} var1-var3;
   
/* suche nach, können auch mehr als zwei Werte sein */
   
array strings{2} $3 _temporary_ ('12h','45f');
   
/* ersetze durch - match strings mit replace */
   
array replace{2} $3 _temporary_ ('xxx','yyy');
   
/* Ausgabevariable */
   
length outvar $3;
   
/* gehe die Suchstrings alle durch, beende wenn gefunden */
   
do i=1 to dim(strings) until (outvar ne ' ');
      
/* gehe alle Variablen durch, beende wenn gefunden */
      
do j=1 to dim(vars) until (outvar ne ' ');
         
/* wenn gefunden, schreibe replace nach outvar */
         
if vars{j} = strings{i} then do;
            outvar = replace{i};
         
end;
      
end;
   
end;
run;

wie wäre denn das Ergebnis

wie wäre denn das Ergebnis in diesem Beispiel?