BookmarkSubscribeRSS Feed
knargis160
Calcite | Level 5

I am trying to create a variable based on two variables

elig1

elig2

if elig1 or elig2 = . then elig3 = .;
else if elig1 = 1 then elig3 = 1; 
else if elig2= 1 then elig3= 2 ;
else if elig2 or elig1 = 1 then elig3 = 3;

elig1 and elig2 or both yes or no variables

i want to have elig3 if both elig1 and elig2 are yes(1) but having trouble as output for elig3 just includes elig2

 

thanks,

 

9 REPLIES 9
ed_sas_member
Meteorite | Level 14

Hi @knargis160 

 

If we take he following practical example, are the conditions correctly applied?

data have;
	input elig1 elig2;
	datalines;
. .
1 1
. 1
1 .
;

data want;
	set have;
	if elig2 = 1 and elig1 = 1 then elig3 = 3;
	else if elig2 = 1 then elig3 = 2 ;
	else if elig1 = 1 then elig3 = 1; 
	else if elig1=. or elig2 = . then elig3 = .;
run;
knargis160
Calcite | Level 5

@ed_sas_member 

and statement does not seem to work

output is giving me missing values. I am thinking and statement does not seem to work.

Do you have any options

ed_sas_member
Meteorite | Level 14

Hi @knargis160 

Please provide datalines as well as the expected output.

-> the rules to code the new variable are not clear at all.

knargis160
Calcite | Level 5

datalines 

 

ptid elig1 elig2

1.      0     1

2.      1     0

3.      1     1

4.       1     0

so on

while coding elig 3 

i am having # for elig 1 but everything else is missing

Tom
Super User Tom
Super User

@knargis160 wrote:

datalines 

 

ptid elig1 elig2

1.      0     1

2.      1     0

3.      1     1

4.       1     0

so on

while coding elig 3 

i am having # for elig 1 but everything else is missing


So you gave us the inputs to your functions truth table, but you did not give the results you want.  Add a column for what results you want.

ELIG1 ELIG2 WANT
    0     0    ?
    0     1    ?
    1     0    ?
    1     1    ?

If you want the treat missing values of ELIGx as different than 0 then you need 3x3=9 rows for the truth table instead of just 2x2=4 rows. 

knargis160
Calcite | Level 5

 

datalines;

ptid elig1 elig2   

1.      0     1

2.      1     0

3.      1     1

4.       1     0

so on

I want to calculate a new variable elig 3 based on elig1 and elig2

 output 

ptid elig1 elig2   elig3

1.      0     1        1

2.     1      0         2

3.     1        1      3

4.      1     0        2

 

2.      1     0        2

3.      1     1        3

4.       1     0        1

5.       1      1      3

 

 

 

ed_sas_member
Meteorite | Level 14

Please try this:

data want;
	set have;
	if elig2 = 1 and elig1 = 1 then elig3 = 3;
	else if elig1 = 1 then elig3 = 2; 
	else if elig2 = 1 then elig3= 1 ;
	else elig3 = .;
run;

I believe there is a mistake in your example for this record ?

ptid elig1 elig2   elig3

1.      0     1        1

2.     1      0         2

3.     1        1      3

4.      1     0        2

 

2.      1     0        2

3.      1     1        3

4.       1     0        1

5.       1      1      3

Tom
Super User Tom
Super User

@knargis160 wrote:

 

datalines;

ptid elig1 elig2   

1.      0     1

2.      1     0

3.      1     1

4.       1     0

so on

I want to calculate a new variable elig 3 based on elig1 and elig2

 output 

ptid elig1 elig2   elig3

1.      0     1        1

2.     1      0         2

3.     1        1      3

4.      1     0        2

 

2.      1     0        2

3.      1     1        3

4.       1     0        1

5.       1      1      3

 

 

 


Why not just

2*elig1 + elig2
Tom
Super User Tom
Super User

What do you mean by this fragment?

elig1 or elig2 = . 

Did you mean:

elig1 or (elig2 = . )

So either ELIG1 is true or ELIG2 is missing?  If that is what you want then it would be clearer to write:

elig1 or missing(elig2)

If you meant this 

(elig1 or elig2) = . 

then it can never be true since the result of a boolean operation is never missing. It is either TRUE (1) or FALSE (0).

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 9 replies
  • 888 views
  • 4 likes
  • 3 in conversation