- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Create a format for the individual conversions, and then loop through the string (1 to countw) and extract the "words" with scan.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
sorry, did not work
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
@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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
@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