*
; /* Date: Thu, 15 Jun 1995 14:42:54 EST Sender: "SAS(r) Discussion";From: Ismail Parsa Subject: Re: "Elegant" sol'n to creating dummy vars The following macro code will do what the user intends to do. I posted a less elaborated version of this macro earlier. Try both "paste=yes" and "paste=no" options and see the results... Parametres DSN= SAS date VAR= Variable PREFIX= PASTE= Test Program: data test ; input code $ @@; datalines ; d c c d d e b c b b b e f b a e d a e ; %Dummy ( dsn = test, var = code, prefix = z_ , paste = Y ) ; proc print ; run ; *-----------------------------* | Ismail Parsa | | Epsilon Data Management | | 50 Cambridge Street | | Burlington MA 01803 USA | | | | E-MAIL: sip@epsilon.com | | V-MAIL: (617) 273-0250*6734 | | FAX: (617) 272-8604 | | | | The Usual Caveat Applies | *-----------------------------* *------------------------------------------------------------------------*/ %macro DUMMY ( dsn = , var = , prefix = D_, paste = YES ) ; proc summary data = &dsn nway ; class &var ; output out = __cnts ( keep = &var ) ; *Ho fico jo per eliminar la variable asociada al primer valor; data __CNTS; set __CNTS; if _n_ = 1 then delete; run; data _null_ ; set __cnts nobs = numvals ; if _n_ = 1 then call symput ( 'num', trim ( left ( put ( numvals, best. ) ) ) ) ; call symput ( 'c' || trim ( left ( put ( _n_, best. ) ) ), trim ( left ( &var ) ) ) ; run ; %if %substr ( %upcase ( %left ( &paste ) ), 1, 1 ) = Y %then %do ; data &dsn ( drop = j ) ; set &dsn ; array __d ( &num ) %do k=1 %to &num ; &prefix&&c&k %end ; ; %end ; %else %do ; data &dsn ( drop = j rename = ( %do k=1 %to &num ; d&k = &prefix.&k %end ; ) ) ; set &dsn ; array __d ( &num ) d1-d&num ; %end ; do j = 1 to &num ; /* initilaize to 0 */ __d(j) = 0 ; end ; if &var = "&c1" then __d ( 1 ) = 1 ; /* create dummies */ %do i = 2 %to &num ; else if &var="&&c&i" then __d ( &i ) = 1 ; %end; run ; %mend Dummy ; *