Multiple IF statements for one case

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Multiple IF statements for one case

Joanne Fennessey
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
Reply | Threaded
Open this post in threaded view
|

Re: Multiple IF statements for one case

John McConnell
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
Reply | Threaded
Open this post in threaded view
|

Re: Multiple IF statements for one case

Marks, Jim
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
Reply | Threaded
Open this post in threaded view
|

Re: Multiple IF statements for one case

Catherine Kubitschek
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
Reply | Threaded
Open this post in threaded view
|

Re: Multiple IF statements for one case

Hal 9000
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
>
Reply | Threaded
Open this post in threaded view
|

Re: Multiple IF statements for one case

Barnett, Adrian (DECS)
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