turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- SAS Programming
- /
- SAS Procedures
- /
- Grouping String Variable s

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-23-2014 01:46 PM

Hopefully there is an easy solution to this problem...

Question: What type of insurance do you have? (check all that apply)

Private insurance provided by employer q99r1

Insurance provider through family member employer q99r2

Insurance purchased directly from insurance company q99r3

......

I would like to group these insurance types into smaller groups, however when running the following code, I do not get true values.

**data** work.pwl_spss; /****message 10****/

set work.pwl_spss;

if q99r1 = **1** then q99m = **1** ;/***Private***/

if q99r2 = **1** then q99m=**1**;

if q99r3 = **1** then q99m=**1**;

if q99r9 = **1** then q99m=**1**;

if q99r4 = **1** then q99m=**1**;

if q99r7 = **1** then q99m=**2**; /**2=Medicare***/

if q99r8 = **1** then q99m=**2**;

if q99r10 = **1** then q99m=**3**; /****3=Medicaid***/

if q99r11 = **1** then q99m=**4**; /***4=Other***/

if q99r12 = **1** then q99m=**4**;

if q99r13 = **1** then q99m=**4**;

if q99r6 = **1** then q99m=**4**;

if q99r14 = **1** then q99m=**6**;/***6=Not Sure***/

**run**;

For example, when adding together q99r1- q99r4, I get 562, but when running this code I get 472.

Thanks!

Accepted Solutions

Solution

07-24-2014
01:20 PM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 01:20 PM

Post an example subset of your data and expected result. I'm not sure why you keep talking about these sums as they are irrelevant for recoding multiple variables into one due to the multiple response nature of the data.

And if you are recoding before cleaning the data, since you say you have values of 2 that should be 0/1 then you may have other issues.

What value do you want q99m to be when **all of q99r1, q99r6,q99r7 and q99r10 are equal to 1**? You are quite likely to have responses that in multiple of you target range, especially Private and Other (betting that your other includes Champus/Tricare military and/or Indian health services or similar) and not impossible to have overlaps with Private and Medicare. Less likely but you may even have overlaps with medicaid.

Your existing code in my example question is going to assign 4 but your looking at the private only variables woud expect you to have a private assignment.

You have to determine a priority which will mask some of your results.

I would usually create 5 dichotomous variables for the target groups so that I would be able to analyze within respondents that had any private insurance as well as any medicare or "other".

All Replies

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-23-2014 02:00 PM

This is because you are counting multiple responses once.

e.g

q99r1 q99r2 q99r3 q99r9 q99m

1 1 1 1 1

1 0 0 0 1

so frequency for

q99m=2

while total frequency for q99r1 + q99r2 + q99r3 + q99r9 is 5

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 09:46 AM

**data** work.pwl_spss; /****message 10****/

set work.pwl_spss;

if q99r1 = **1** then q99m = **1** ;/***Private***/

**else** if q99r2 = **1** then q99m=**1**;

**else **if q99r3 = **1** then q99m=**1**;

**else **if q99r9 = **1** then q99m=**1**;

**else **if q99r4 = **1** then q99m=**1**;

**else **if q99r7 = **1** then q99m=**2**; /**2=Medicare***/

**else **if q99r8 = **1** then q99m=**2**;

**else **if q99r10 = **1** then q99m=**3**; /****3=Medicaid***/

**else **if q99r11 = **1** then q99m=**4**; /***4=Other***/

**else **if q99r12 = **1** then q99m=**4**;

**else **if q99r13 = **1** then q99m=**4**;

**else **if q99r6 = **1** then q99m=**4**;

**else **if q99r14 = **1** then q99m=**6**;/***6=Not Sure***/

**run**;

??????????

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 11:31 AM

Hi KSharp,

I have tried that method of code as well, but it is still not giving me the true value, I am surely lost in this.

When adding, q99r1 q99r2 q99r3 q99r4 and q99r9 i get 562. When using the code mentioned in my first comment, I get 472. When using the code mentioned by stat@sas I get 1=546, 2=8 (no clue where the

'2' came from as the repsonse options are 1 for 0 for no). When using the code mentioned by Ksharp, the output is 554. Thanks for everyone's help thus far, very much appreciated!

Solution

07-24-2014
01:20 PM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 01:20 PM

Post an example subset of your data and expected result. I'm not sure why you keep talking about these sums as they are irrelevant for recoding multiple variables into one due to the multiple response nature of the data.

And if you are recoding before cleaning the data, since you say you have values of 2 that should be 0/1 then you may have other issues.

What value do you want q99m to be when **all of q99r1, q99r6,q99r7 and q99r10 are equal to 1**? You are quite likely to have responses that in multiple of you target range, especially Private and Other (betting that your other includes Champus/Tricare military and/or Indian health services or similar) and not impossible to have overlaps with Private and Medicare. Less likely but you may even have overlaps with medicaid.

Your existing code in my example question is going to assign 4 but your looking at the private only variables woud expect you to have a private assignment.

You have to determine a priority which will mask some of your results.

I would usually create 5 dichotomous variables for the target groups so that I would be able to analyze within respondents that had any private insurance as well as any medicare or "other".

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 02:05 PM

Hope this helps in explaining my issue, and thank you again for your conintued help.

When I run q99r1, q99r2,q99r3, q99r3 and q99r9 individually, their respecitve counts are 260, 234, 33, 13, and 22 which adds up to 562. When I have tried running the aforemention codes, neither has given my the value of 562.

When either q99r1, q99r2,q99r3, q99r3 and q99r9 equals '1(yes)', I want the sum of the dummy variable which groups these varaibles to be 562.

ID | q99r1 | q99r2 | q99r3 |

1 | yes | yes | no |

2 | no | yes | no |

3 | no | yes | yes |

4 | no | no | no |

5 | yes | no | no |

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-24-2014 02:42 PM

But what do you want as a result in the case I mentioned? You have a single outcome variable Q99M which also gets assigned when variables other than q99r1-4 and 9. As long as you have multiple variables in addition to those that set q99m then you are going to have inconsistency. If you want a varaible assigned just for that group you can use something like:

Q99g1 = (max( of q99r1-q99r4, q99r9) = 1);

and additional group variables for the other combinations.

However if you still have values of 2 when you say they should be 1 and 0 then you've still got other problems.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-28-2014 11:20 AM

Thank you ballrdw! That response seems to have worked for the grouping every insurance group except "Private" where 8 are still missing, assuming those are the 8 listed as "2". Went through the dataset and all responses are either 'yes' 'no' so I'll try to figure this out on my own.