BookmarkSubscribeRSS Feed
sweettravel
Calcite | Level 5
Hi, all
I have the original data set like this:
Male Female V1 V2 V3 V4
3 2 2 4 5 7
2 3 6 9 3 8

Now I want to transform it into a new data set. Instead of male and female, now I have a new variable "gender", and gender=0 for male, gender=1 for female. If male=3, then repeat the observation 3 times with gender=0; if female=2, then repeat the observation 2 times with gender=1.

The transformed data set should look like:
Gender V1 V2 V3 V4
0 2 4 5 7
0 2 4 5 7
0 2 4 5 7
1 2 4 5 7
1 2 4 5 7
0 6 9 3 8
0 6 9 3 8
1 6 9 3 8
1 6 9 3 8
1 6 9 3 8


This task is really tricky for me. Wonder whether anyone have an idea of how to implement it. Thanks a lot!
2 REPLIES 2
Rambo
Calcite | Level 5
Hi Sweettravel,

You can use the output statement [along with a do loop] to help print duplicate records.

Try using the following code:

data transformed;
set original;

gender = 0; /*sets the gender to male*/
do m = 1 to male;
output transformed;
end;
gender = 1; /* sets the gender to female*/
do f = 1 to female;
output transformed;
end;
keep gender v1-v4; /*ensures the key variables are kept*/
run;


I will note that the code above assumes male and female are both greater than 0. If this is not the case, you will need to add a conditional logic check before dropping into the DO loops.

Rambo
sweettravel
Calcite | Level 5
Thanks a lot, Rambo. The code works great on my sample data, I will apply to my large data, too. Saves me lots of time, thanks again!

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 2 replies
  • 1068 views
  • 0 likes
  • 2 in conversation