Vielen Dank für die Hilfe...und gleich eine neue Frage:

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...

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:

data eins;
/* 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 ......         Z235

dann 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;