Vielen Dank für die Hilfe...und gleich eine neue Frage:
Verfasst von StephanieCGross am 28 Februar, 2007 - 12:25
Vielen Dank für die schnelle Hilfe, das hat schonmal gut geklappt, aber nun ist eine neue Frage aufgetaucht:
Also, ich habe eine Datei "EINS", die insgesamt 15366 Beobachtung und 285 Variablen enthält. Unter anderem gibt es die Variablen ZH0, ZH011, ZH012 sowie die Variablen ZH20, ZH23 und ZH231-235. Die Ausprägungen sind ausschließlich numerische Werte. Nun möchte ich eine Datei erzeugen, die statt der Variablen ZH23 und ZH231-235 nur EINE Variable ZH23 enthält, deren Ausprägung die Summe der Ausprägungen ZH23 und ZH231-235 darstellt. Ebenso soll für ZH24 und ZH241-245 verfahren werden usw...
Ich hoffe, meine Frage ist verständlich...
»
- Anmelden oder Registrieren um Kommentare zu schreiben

Einfache Lösung
Hallo,
wie immer gilt auch hier: Viele Wege führen nach Rom.
Genauso hat SAS für fast alle Probleme mindestens drei verschiedene Wege zum Ziel (die 3 ist nur so geraten). Die Schwierigkeit besteht darin, die zu finden bzw. zu kennen.
Es gibt zu dem Problem eine ganz einfache Lösung:
/* bla bla bla ... Code für Test-Daten aus dem Beitrag von */
/* Wolfgang Hornung, 28. Februar 2007, 15:39 */
run;
data zwei;
retain z00 z01; /* dadurch stehen diese Vars ganz links */
/* ist im LST nach proc print bequemer */
set eins;
/* HIER macht SAS alles was nötig ist! */
z00=z00+sum(of z001-z005); /* SAS nimmt autom. an, dass z00 ein */
/* array von 1 bis 5 ist, mit den Vars */
/* z001, z002, ... z005 */
z01=z01+sum(of z011-z015); /* SAS nimmt autom. an, dass z01 ein */
/* array von 1 bis 5 ist, mit den Vars */
/* z011, z012, ... z015 */
run;
proc print; run;
Das war's
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
Mit einem Array müsste funktionieren
Hallo Stephanie,
wenn die Variablen systematisch bezeichnet sind, also
Z00 Z001 Z002 Z003 Z004 Z005 etc. Z23 Z231 ...... Z235dann müsste es folgendermaßen gehen (mit kleinem Beispiel).
data eins;
z00=1;
z001=1;
z002=1;
z003=1;
z004=1;
z005=1;
z01=2;
z011=2;
z012=2;
z013=2;
z014=2;
z015=2;
run;
%macro test;
data test;
set eins;
array _z(2,6) %do i = 0 %to 1;
z%sysfunc(putn(&i.,z2.))
%do j = 1 %to 5;
z%sysfunc(putn(&i.,z2.))&j.
%end;
%end;
;
do i = 1 to 2;
do j = 2 to 6;
_z(i,1)+_z(i,j);
end;
end;
run;
%mend;
options mprint;
%test
Mit options mprint siehst Du, wie das Array aufgebaut wird. Das Makro ist notwendig, da im Open Code keine Makroschleifen und If- Abfragen funktionieren.
Ich hoffe, es hilft.
Gruß
Wolfgang
Zusatz
der erste Index in der Definition des Arrays muss dann entsprechend dimensioniert sein, wie auch die beiden Schleifen bezüglich i.
Probiers mal mit einem
Probiers mal mit einem DATA-Step:
DATA neu;
SET eins;
ZH23neu = ZH23 + ZH231 + ZH232 + ZH233 + ZH234 + ZH235;
RUN;