LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (November 1999, week 5)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Mon, 29 Nov 1999 10:20:01 +0100
Reply-To:     "Behrens, Dje" <Dje.Behrens@IKD-ULM.DE>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         "Behrens, Dje" <Dje.Behrens@IKD-ULM.DE>
Subject:      an iterative %do loop
Comments: To: "SAS-L@UGA.CC.UGA.EDU" <SAS-L@UGA.CC.UGA.EDU>
Content-Type: text/plain; charset="iso-8859-1"

Hi,

I create the following macro to write a one-line report. It works properly. I intend to add another line to the report. That means a two-line report.

For this purpose I have to write even more statements for calculating the positions where the variables and the column titles schuld

appear on the listing.

Can somebody tell me how to write an interative %do loop to reduce the unnessary source code lines.

Thanks in advance.

Dje Behrens

Zweckverband Interkommunale Datenverarbeitung Ulm Germany

Inclose:

/*------------------------------------------------------------*/ /*---------Standard Listenbild--------------------------------*/ /*------------------------------------------------------------*/ %macro rept(abstand=1 ,form=quer ,count=1 ,var1=drgrad ,v1nam=DR. ,v1len=7 ,var2=fname ,v2nam=FAMILIENNAME ,v2len=20 ,var3=vname ,v3nam=VORNAME ,v3len=15 ,var4=gebdatF ,v4nam=GEBDAT ,v4len=10 ,var5=strname ,v5nam=STRASSE ,v5len=20 ,var6=hnr ,v6nam=HNR ,v6len=4 ,var7=hnrzus ,v7nam=ZUS ,v7len=3 ,var8=geschl ,v8nam=G ,v8len=1 ,var9=dt ,v9nam=DT ,v9len=2 ,var10=otname ,v10nam=OTNAME ,v10len=8 ,var11= ,v11nam= ,v11len= ,var12= ,v12nam= ,v12len= ,var13= ,v13nam= ,v13len= ,var14= ,v14nam= ,v14len= ,var15= ,v15nam= ,v15len= ,var16= ,v16nam= ,v16len= );

%IF &v1len EQ %then %let v1len=0; %IF &v2len EQ %then %let v2len=0; %IF &v3len EQ %then %let v3len=0; %IF &v4len EQ %then %let v4len=0; %IF &v5len EQ %then %let v5len=0; %IF &v6len EQ %then %let v6len=0; %IF &v7len EQ %then %let v7len=0; %IF &v8len EQ %then %let v8len=0; %IF &v9len EQ %then %let v9len=0; %IF &v10len EQ %then %let v10len=0; %IF &v11len EQ %then %let v11len=0; %IF &v12len EQ %then %let v12len=0; %IF &v13len EQ %then %let v13len=0; %IF &v14len EQ %then %let v14len=0; %IF &v15len EQ %then %let v15len=0; %IF &v16len EQ %then %let v16len=0;

%let v1l =%eval(&v1len +(1 * &abstand ) ); %let v2l =%eval(&v1len + &v2len +(2 * &abstand) ); %let v3l =%eval(&v1len + &v2len + &v3len + (3* &abstand) ); %let v4l =%eval(&v1len + &v2len + &v3len + &v4len + (4*&abstand) ); %let v5l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len+ (5*&abstand) ); %let v6l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len+ (6 * &abstand) ); %let v7l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + (7*&abstand) ); %let v8l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + ( 8*&abstand )); %let v9l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + (9 * &abstand) );

%let v10l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + (10 * &abstand) ); %let v11l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + &v11len + (11 * &abstand));

%let v12l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + &v11len + &v12len+(12 *&abstand));

%let v13l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + &v11len + &v12len + &v13len + (13* &abstand) );

%let v14l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + &v11len + &v12len + &v13len + (14* &abstand) + &v14len );

%let v15l =%eval(&v1len + &v2len + &v3len +&v4len + &v5len + &v6len + &v7len + &v8len + &v9len + &v10len + &v11len + &v12len + &v13len + (15* &abstand) + &v14len + &v14len );

proc printto print=SASLIST; run;

%if %upcase(&form) eq HOCH %then %do; %let pss=80; %let lss=80; %END; %else %do; %let pss=70; %let lss=132; %END;

options nocenter nodate nonumber ps=&pss ls=&lss;

%DO I=1 %TO &COUNT; data _null_; set work.&ausg end=last ; by &_lsort;

file SASLIST notitles header=kopf; if first.ags and _n_ > 1 then do ; put _page_; seitenr =0 ; end;

PUT &var1 @(&v1l) &var2 @(&v2l) &var3 @(&v3l) &var4 @(&v4l) &var5 @(&v5l) &var6 @(&v6l) &var7 @(&v7l) &var8 @(&v8l) &var9 @(&v9l) &var10 @(&v10l) &var11 @(&v11l) &var12 @(&v12l) &var13 @(&v13l) &var14 @(&v14l) &var15 @(&v15l) &var16 ; if last then put //////// @10 "Gesamte Anzahl: &_anzahl "; RETURN ;

KOPF: seitenr +1 ; %if %upcase(&form) eq HOCH %then %do; put 80*'*'; put "Ersteller: &_user " @50 "Datum: &_datum" @70"Seite: "seitenr 3.; %END; %ELSE %DO; put 132*'*'; put "Ersteller: &_user " @100 "Datum: &_datum" @120"Seite: "seitenr 3.; %END;

put " E I N W O H N E R W E S E N "; put /; put agsF ; put " &_tit1 "; put " &_tit2 "; put " &_tit3 ";

%if %upcase(&form) eq HOCH %then put 80*'*'; %ELSE put 132*'*'; put /;

PUT "&v1nam" @(&v1l) "&v2nam" @(&v2l) "&v3nam" %IF &v4nam NE %then %do; @(&v3l) "&v4nam" %end;

%IF &v5nam NE %then %do; @(&v4l) "&v5nam" %end;

%IF &v6nam NE %then %do; @(&v5l) "&v6nam" %end;

%IF &v6nam NE %then %do; @(&v6l) "&v7nam" %end;

%IF &v8nam NE %then %do; @(&v7l) "&v8nam" %end;

%IF &v9nam NE %then %do; @(&v8l) "&v9nam" %end;

%IF &v10nam NE %then %do; @(&v9l) "&v10nam" %end;

%IF &v11nam NE %then %do; @(&v10l) "&v11nam" %end;

%IF &v12nam NE %then %do; @(&v11l) "&v12nam" %end;

%IF &v13nam NE %then %do; @(&v12l) "&v13nam" %end;

%IF &v14nam NE %then %do; @(&v13l) "&v14nam" %end;

%IF &v15nam NE %then %do; @(&v14l) "&v15nam" %end;

%IF &v16nam NE %then %do; @(&v15l) "&v16nam" %end; ;

%if %upcase(&form) eq HOCH %then put 80*'_'; %ELSE put 132*'_'; RETURN ; %END;

run; %mend rept;


Back to: Top of message | Previous page | Main SAS-L page