DATA Step, Macro, Functions and more

SAS program

Reply
Occasional Contributor cm3
Occasional Contributor
Posts: 6

SAS program

Hi

Pls help with this logic to write in SAS code

If response contains 'i1'/'i2'/'i3', Res=A or B or C respectively.

for ex:   response=i1,i2 then Res=AB

response=i1,i3 then Res=AC

 

Thnks

 

Super User
Posts: 9,925

Re: SAS program

Create a format for the individual conversions, and then loop through the string (1 to countw) and extract the "words" with scan.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Super User
Posts: 13,358

Re: SAS program

Without seeing more examples of actual data I would start with something like this:

data want;
   set have;
   length res $ 3;
   if findw(response,'i1',"/'")>0 then res='A';
   if findw(response,'i2',"/'")>0 then res=cats(res,'B'); 
   if findw(response,'i3',"/'")>0 then res=cats(res,'C'); 
run;
Occasional Contributor cm3
Occasional Contributor
Posts: 6

Re: SAS program

sorry, did not work

Super User
Posts: 13,358

Re: SAS program


@cm3 wrote:

sorry, did not work


"Did not work" is awful vague.

Are there errors in the log?: Post the code and log in a code box opened with the {i} to maintain formatting of error messages.

No output? Post any log in a code box.

Unexpected output? Provide input data in the form of data step code pasted into a code box, the actual results and the expected results. Instructions here: https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-dat... will show how to turn an existing SAS data set into data step code that can be pasted into a forum code box using the {i} icon or attached as text to show exactly what you have and that we can test code against.

 

Since you did not provide any actual data other than a string that by face value is invalid in SAS, to have imbedded ' as you you use the definition would have to have " " around the entire value, I provided a guess.

PROC Star
Posts: 8,150

Re: SAS program

@ballardw's suggestion didn't include looking for commas, and was case sensitive. Does the following work on your data?:

data have;
  input response $;
  cards;
I1,I3
I3,I2
i1,i2,i3
I1,I2
I2,I3
;

data want;
  set have;
  length res $3;
  if findw (Response,'I1',"/,",'i') then Res='A';
  if findw (Response,'I2',"/,",'i') then Res=catt(Res,'B');
  if findw (Response,'I3',"/,",'i') then Res=catt(Res,'C');
run;

Art, CEO, AnalystFinder.com

 

Ask a Question
Discussion stats
  • 5 replies
  • 114 views
  • 0 likes
  • 4 in conversation