DATA Step, Macro, Functions and more

Help creating a new column based on observations in other columns

Reply
New Contributor
Posts: 2

Help creating a new column based on observations in other columns

Hello,

I am having trouble creating a new variable using conditions, I've tried data steps but to no avail.

 

My data set looks like this right now:

 

 

A B C D E
1 . 1 1 .
. 1 . . . 
1 . 1 . 1 

 

I need to look like this 

 

A B C D E R
. .  .  . 1
. 1 . . . .
. . . . . 1

So the idea that i've used is if the sum of a -- d is greater than 1 then set R equal to 1 else .  and then drop the observations if 1 is present in a & b & c & d & e but its not doing it for me perhaps its due to missing values. 

 

code i've used so far:

 

data campZ;
	set campY;
	select;
	when (sum(Macroscopic -- Symbolic > 1)) Random = 1;
    otherwise;
end; 
run;

I've tried Proc SQL as well but I have been mainly focusing on the data step but any help will be great. 

 

Thank you!

Will 

 

 

New Contributor
Posts: 2

Re: Help creating a new column based on observations in other columns

Super Contributor
Posts: 490

Re: Help creating a new column based on observations in other columns

[ Edited ]
data need (Drop= i numMissing);
set have;
array varx(*) A--E; 
numMissing = cmiss(A,B,C,D);
	if numMissing < 3 then DO; 
		R = 1;
			Do i =1 to dim(varx);
				varx(i)=.;
			End;
	End;
	Else R=.;
run;
Super Contributor
Posts: 490

Re: Help creating a new column based on observations in other columns

Another way

 

data need (Drop= i);
set have;
array varx(5) A--E; 
	if SUM(A,B,C,D) > 1 then DO; 
		R = 1;
			Do i =1 to dim(varx);
			varx(i)=.;
			End;
	End;
	Else R=.;
run;
Super User
Posts: 9,681

Re: Help creating a new column based on observations in other columns

data have;
input A B C D E;
cards;
1 . 1 1 .
. 1 . . . 
1 . 1 . 1
;
run;
data want;
 set have;
 if sum(of A--E) > 1 then do;
  Random = 1;
  call missing(of A--E);
 end;
run;
Ask a Question
Discussion stats
  • 4 replies
  • 207 views
  • 1 like
  • 3 in conversation