BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
mt88
Calcite | Level 5

Hello,

 

I'm looking for an efficient way to create dummy variables and I've seen this example online:

 

DATA auto ;
  LENGTH make $ 20 ;
  INPUT make $ 1-17 price mpg rep78 ;
CARDS;
AMC Concord        4099 22 3 
AMC Pacer          4749 17 3 
Audi 5000          9690 17 5 
Audi Fox           6295 23 3 
BMW 320i           9735 25 4 
Buick Century      4816 20 3 
Buick Electra      7827 15 4 
Buick LeSabre      5788 18 3 
Cad. Eldorado     14500 14 2 
Olds Starfire      4195 24 1 
Olds Toronado     10371 16 3 
Plym. Volare       4060 18 2 
Pont. Catalina     5798 18 4 
Pont. Firebird     4934 18 1 
Pont. Grand Prix   5222 19 3 
Pont. Le Mans      4723 19 3 
;
RUN;

 

DATA auto2;
  set auto;
 
  ARRAY dummys {*} 3.  rep78_1 - rep78_5;
 
  DO i=1 TO 5;			      
    dummys(i) = 0;
  END;
  dummys( rep78  ) = 1;		
 
RUN;

This has been working for me except when I have missing values (e.g. if rep78 has missing values). Is there a way to adjust this code to account for the missing values or do I need a different solution?

 

Thanks

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26
DATA auto2;
  set auto;
  ARRAY dummys rep78_1 - rep78_5 (5*0);
  if not missing(rep78) then dummys( rep78 ) = 1;		
RUN;

This gives your dummy variables a value of zero when rep78 is missing. You can modify that further to give the dummy variables a missing value as well.

--
Paige Miller

View solution in original post

4 REPLIES 4
PaigeMiller
Diamond | Level 26
DATA auto2;
  set auto;
  ARRAY dummys rep78_1 - rep78_5 (5*0);
  if not missing(rep78) then dummys( rep78 ) = 1;		
RUN;

This gives your dummy variables a value of zero when rep78 is missing. You can modify that further to give the dummy variables a missing value as well.

--
Paige Miller
mt88
Calcite | Level 5

Hello,

You mentioned that 'You can modify that further to give the dummy variables a missing value as well.' Can you show me that modification?

 

Thank you.

PaigeMiller
Diamond | Level 26

Replace the 0 with a .

--
Paige Miller
Tom
Super User Tom
Super User

Make sure the value of REP78 is something you could use as an index into the array.

if rep78  in (1:5) then  dummys( rep78  ) = 1;	

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 946 views
  • 0 likes
  • 3 in conversation