I have a dataset where I would like to add a new column assigned 'bruks' where if 'champ1', 'champ2', 'champ3' 'champ4' 'champ5' or 'champ6' have any of the following observations;
50 161 183 196 264 331 633 746 798 103 163 524 525 526, it should be assigned as 1 in 'bruks', if neither, it should be assigned 0 in 'bruks'. I really have trouble finding the right type of statement for this, I understand that if, then is not proper with this amount of variables and columns, but cannot seem to make the select -when statement to work properly wither (I amcoding it wrong, obviously ;))
Can anyone help, please?
One of my attempts here ( I tried both with end; in all lines, and without, and this only shows the first two *champ*categories):
data rrmh.bruks;
set rrmh.etresultat;
select (champ1);
when (50) do; bruks=1;
when (161) do; bruks=1;
when (183) do; bruks=1;
when (196) do; bruks=1;
when (264) do; bruks=1;
when (331) do; bruks=1;
when (633) do; bruks=1;
when (746) do; bruks=1;
when (798) do; bruks=1;
when (103) do; bruks=1;
when (163) do; bruks=1;
when (524) do; bruks=1;
when (525) do; bruks=1;
when (526) do; bruks=1;
select (champ2);
when (50) do; bruks=1;end;
when (161) do; bruks=1;end;
when (183) do; bruks=1;end;
when (196) do; bruks=1;end;
when (264) do; bruks=1;end;
when (331) do; bruks=1;end;
when (633) do; bruks=1;end;
when (746) do; bruks=1;end;
when (798) do; bruks=1;end;
when (103) do; bruks=1;end;
when (163) do; bruks=1;end;
when (524) do; bruks=1;end;
when (525) do; bruks=1;end;
when (526) do; bruks=1;end;
otherwise; bruks=0;
end;
run;
Thanks in advance!
Also the IN operator
bruks=0;
if champs1 in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
Be careful with the otherwise. If you find a value in champ1 for example and then run the second set of Select statements it would reset it 0.
Using an array would be much better. let us know if you need help with coding.
Yes, I absolutely need help with the coding 😄
I am a beginner to SAS, and mostly change programs others have already coded, so this is new to me!
Also the IN operator
bruks=0;
if champs1 in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
Be careful with the otherwise. If you find a value in champ1 for example and then run the second set of Select statements it would reset it 0.
So I can write:
bruks=0;
if champ1 in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
if champ2 in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
if champ3 in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
and so on?
It was the "in" that I wasn't aware of, that ruined my IF-THEN attempt.
But I see that your last answer is better for more variables, yes. What does the "dim" stand for?
If the columns had different names (champ, many, few, lot, none), how would the code in the first line look? And I might reveal myself as a total ignorant now, but when one has stated that bruks=1 for all the mentioned numbers, what does the do i=1 to dim(chmp); do?
array chmp(5) champ1-champ5;
bruks=0;
do i=1 to dim(chmp);
if chmp(i) in (50 161 183 196 264 331 633 746 798 103 163 524 525 526) then bruks=1;
end;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 16. Read more here about why you should contribute and what is in it for you!
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.
Select SAS Training centers are offering in-person courses. View upcoming courses for: