|
As part of a data cleaning effort, I need to change the values of several
(sometimes many) variables for one case. It would be nice if there was a command similar to DO IF for this purpose. For instance, to do this task now I use: * Fix responses for Person 1 (id number 123). if idnumb = 123 var 1 = 345. if idnumb = 123 var 2 = 456. if idnumb = 123 var 3 = 567. if idnumb = 123 var 4 = 678. if idnumb = 123 var 5 = 789. * Fix responses for Person 2 (id number 987). if idnumb = 987 var 3 = 123. if idnumb = 987 var 5 = 234. if idnumb = 987 var 8 = 345. if idnumb = 987 var 11 = 456. if idnumb = 987 var 15 = 567. Repeating the id number each line seems very redundant, and I wonder if there isn't some more efficient way of dealing with this task. Maybe something similar to: IF idnumb = 123 var 1 = 345 var 2 = 456 var 3 = 567 var 4 = 678 var 5 = 789. END IF IF idnumb = 987 var 3 = 123 var 5 = 234 var 8 = 345 var 11 = 456 var 15 = 567. END IF. ================== Joanne M. Fennessey Beginning School Study Johns Hopkins University Baltimore, MD 21218 410-516-7864 |
|
Joanne,
I think there is a version of DO IF that will do this ... if I understood correctly. Try ... DO IF idnumb = 123. - COMPUTE var 1 = 345. - COMPUTE var 2 = 456. - COMPUTE var 3 = 567. - COMPUTE var 4 = 678. - COMPUTE var 5 = 789. END IF. ... note the use of the period after each line. The hyphen (-) just allows you to indent the code within the DO IF block to make the SPSS syntax more readable - like a real programming language ;-) Hth John applied insights 7200 The Quorum | Oxford Business Park North | Oxford | OX4 2JZ -----Original Message----- From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of Joanne Fennessey Sent: 20 July 2007 18:31 To: [hidden email] Subject: Multiple IF statements for one case As part of a data cleaning effort, I need to change the values of several (sometimes many) variables for one case. It would be nice if there was a command similar to DO IF for this purpose. For instance, to do this task now I use: * Fix responses for Person 1 (id number 123). if idnumb = 123 var 1 = 345. if idnumb = 123 var 2 = 456. if idnumb = 123 var 3 = 567. if idnumb = 123 var 4 = 678. if idnumb = 123 var 5 = 789. * Fix responses for Person 2 (id number 987). if idnumb = 987 var 3 = 123. if idnumb = 987 var 5 = 234. if idnumb = 987 var 8 = 345. if idnumb = 987 var 11 = 456. if idnumb = 987 var 15 = 567. Repeating the id number each line seems very redundant, and I wonder if there isn't some more efficient way of dealing with this task. Maybe something similar to: IF idnumb = 123 var 1 = 345 var 2 = 456 var 3 = 567 var 4 = 678 var 5 = 789. END IF IF idnumb = 987 var 3 = 123 var 5 = 234 var 8 = 345 var 11 = 456 var 15 = 567. END IF. ================== Joanne M. Fennessey Beginning School Study Johns Hopkins University Baltimore, MD 21218 410-516-7864 |
|
In reply to this post by Joanne Fennessey
DO IF will work for this structure:
DO IF idnumb = 123. COMPUTE var1 = 345. COMP var2 - 456. ELSE IF idnumb = 456. COMP var1 = 789. COMPUTR var5= 456. END IF. -- jim -----Original Message----- From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of Joanne Fennessey Sent: Friday, July 20, 2007 12:31 PM To: [hidden email] Subject: Multiple IF statements for one case As part of a data cleaning effort, I need to change the values of several (sometimes many) variables for one case. It would be nice if there was a command similar to DO IF for this purpose. For instance, to do this task now I use: * Fix responses for Person 1 (id number 123). if idnumb = 123 var 1 = 345. if idnumb = 123 var 2 = 456. if idnumb = 123 var 3 = 567. if idnumb = 123 var 4 = 678. if idnumb = 123 var 5 = 789. * Fix responses for Person 2 (id number 987). if idnumb = 987 var 3 = 123. if idnumb = 987 var 5 = 234. if idnumb = 987 var 8 = 345. if idnumb = 987 var 11 = 456. if idnumb = 987 var 15 = 567. Repeating the id number each line seems very redundant, and I wonder if there isn't some more efficient way of dealing with this task. Maybe something similar to: IF idnumb = 123 var 1 = 345 var 2 = 456 var 3 = 567 var 4 = 678 var 5 = 789. END IF IF idnumb = 987 var 3 = 123 var 5 = 234 var 8 = 345 var 11 = 456 var 15 = 567. END IF. ================== Joanne M. Fennessey Beginning School Study Johns Hopkins University Baltimore, MD 21218 410-516-7864 |
|
In reply to this post by Joanne Fennessey
Joanne,
You were very close. There is a DO IF command for this purpose. Here's an example that works. data list /a 1 . begin data 1 2 3 4 end data . do if a=2 . compute b=1 . compute c=3 . end if . Catherine At 7/20/2007 01:30 PM, Joanne Fennessey wrote: >As part of a data cleaning effort, I need to change the values of several >(sometimes many) variables for one case. It would be nice if there was a >command similar to DO IF for this purpose. For instance, to do this task >now I use: > > > >* Fix responses for Person 1 (id number 123). > >if idnumb = 123 var 1 = 345. > >if idnumb = 123 var 2 = 456. > >if idnumb = 123 var 3 = 567. > >if idnumb = 123 var 4 = 678. > >if idnumb = 123 var 5 = 789. > > > >* Fix responses for Person 2 (id number 987). > >if idnumb = 987 var 3 = 123. > >if idnumb = 987 var 5 = 234. > >if idnumb = 987 var 8 = 345. > >if idnumb = 987 var 11 = 456. > >if idnumb = 987 var 15 = 567. > > > >Repeating the id number each line seems very redundant, and I wonder if >there isn't some more efficient way of dealing with this task. Maybe >something similar to: > > > >IF idnumb = 123 > > var 1 = 345 > > var 2 = 456 > >var 3 = 567 > >var 4 = 678 > >var 5 = 789. > >END IF > > > >IF idnumb = 987 > >var 3 = 123 > >var 5 = 234 > >var 8 = 345 > >var 11 = 456 > >var 15 = 567. > >END IF. > > > > > > > > > >================== > >Joanne M. Fennessey > >Beginning School Study > >Johns Hopkins University > >Baltimore, MD 21218 > >410-516-7864 |
|
In reply to this post by Marks, Jim
It sounds like the fixes vary from person to person...in which case you
might be stuck. If bunches of people have the same problems to fix, then you might try: do if any(idnumb, 123, 234, 345). compute .... else if any(idnumb, 456, 567, 678). compute ... end if. On 7/20/07, Marks, Jim <[hidden email]> wrote: > > DO IF will work for this structure: > > DO IF idnumb = 123. > COMPUTE var1 = 345. > COMP var2 - 456. > ELSE IF idnumb = 456. > COMP var1 = 789. > COMPUTR var5= 456. > END IF. > > -- jim > > > > -----Original Message----- > From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of > Joanne Fennessey > Sent: Friday, July 20, 2007 12:31 PM > To: [hidden email] > Subject: Multiple IF statements for one case > > As part of a data cleaning effort, I need to change the values of > several (sometimes many) variables for one case. It would be nice if > there was a command similar to DO IF for this purpose. For instance, to > do this task now I use: > > > > * Fix responses for Person 1 (id number 123). > > if idnumb = 123 var 1 = 345. > > if idnumb = 123 var 2 = 456. > > if idnumb = 123 var 3 = 567. > > if idnumb = 123 var 4 = 678. > > if idnumb = 123 var 5 = 789. > > > > * Fix responses for Person 2 (id number 987). > > if idnumb = 987 var 3 = 123. > > if idnumb = 987 var 5 = 234. > > if idnumb = 987 var 8 = 345. > > if idnumb = 987 var 11 = 456. > > if idnumb = 987 var 15 = 567. > > > > Repeating the id number each line seems very redundant, and I wonder if > there isn't some more efficient way of dealing with this task. Maybe > something similar to: > > > > IF idnumb = 123 > > var 1 = 345 > > var 2 = 456 > > var 3 = 567 > > var 4 = 678 > > var 5 = 789. > > END IF > > > > IF idnumb = 987 > > var 3 = 123 > > var 5 = 234 > > var 8 = 345 > > var 11 = 456 > > var 15 = 567. > > END IF. > > > > > > > > > > ================== > > Joanne M. Fennessey > > Beginning School Study > > Johns Hopkins University > > Baltimore, MD 21218 > > 410-516-7864 > |
|
In reply to this post by Joanne Fennessey
Hi Joanne,
An alternative that doesn't involve writing as much syntax is to use the UPDATE procedure. Basically you create a file of just the updated values plus an index field on which you perform a join to your original data file. If you have lots and lots of cases requiring changes, this is probably easier and less time-consuming. However if it's only a few cases and variables, the DO IF method is better. Regards Adrian Barnett -----Original Message----- From: SPSSX(r) Discussion [mailto:[hidden email]] On Behalf Of Joanne Fennessey Sent: Saturday, 21 July 2007 3:01 AM To: [hidden email] Subject: Multiple IF statements for one case As part of a data cleaning effort, I need to change the values of several (sometimes many) variables for one case. It would be nice if there was a command similar to DO IF for this purpose. For instance, to do this task now I use: * Fix responses for Person 1 (id number 123). if idnumb = 123 var 1 = 345. if idnumb = 123 var 2 = 456. if idnumb = 123 var 3 = 567. if idnumb = 123 var 4 = 678. if idnumb = 123 var 5 = 789. * Fix responses for Person 2 (id number 987). if idnumb = 987 var 3 = 123. if idnumb = 987 var 5 = 234. if idnumb = 987 var 8 = 345. if idnumb = 987 var 11 = 456. if idnumb = 987 var 15 = 567. Repeating the id number each line seems very redundant, and I wonder if there isn't some more efficient way of dealing with this task. Maybe something similar to: IF idnumb = 123 var 1 = 345 var 2 = 456 var 3 = 567 var 4 = 678 var 5 = 789. END IF IF idnumb = 987 var 3 = 123 var 5 = 234 var 8 = 345 var 11 = 456 var 15 = 567. END IF. ================== Joanne M. Fennessey Beginning School Study Johns Hopkins University Baltimore, MD 21218 410-516-7864 |
| Free forum by Nabble | Edit this page |
