Date: Tue, 19 Dec 2000 11:26:43 -0500
Reply-To: Deinya Phenix <deinya.phenix@NYU.EDU>
Sender: "SPSSX(r) Discussion" <SPSSX-L@LISTSERV.UGA.EDU>
From: Deinya Phenix <deinya.phenix@NYU.EDU>
Subject: Re: Automate a complex search
In-Reply-To: <3.0.3.32.20001218180647.00832cd0@syzygy.email.umn.edu>
Content-Type: text/plain; charset="iso-8859-1"
Amy,
Carol's solution is first rate. I would only add that you can reduce the
lines of code by half if you use:
COMPUTE FLAG1=ANY("1234", dx1, dx2_1 to dx2_15).
repeated for each diagnostic code. Also, beware of case sensitivity.
If you're doing 35 (or more) diagnostic codes, you might want to use a
simple macro just so you can put all your codes in one command line. Even
if you add codes later, this'll give you 6 lines (plus your documentation)
instead of 37 or 72:
DEFINE diagflag (!POS (!CMDEND)).
!DO !diag !IN !1.
COMPUTE FLAG1=ANY(!QUOTE(!diag), dx1, dx2_1 to dx2_15).
!DOEND.
!ENDDEFINE.
DIAGFLAG code code code ...list your codes here...
SELECT IF FLAG EQ 1.
SAVE OUTFILE=newname.
Good luck,
-D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Deinya Phenix
Data Analyst
NYU Institute for Education and Social Policy
New York, NY 10003
(212) 998-5073 voice
(212) 995-4564 fax
dp53@nyu.edu
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----Original Message-----
From: SPSSX(r) Discussion [mailto:SPSSX-L@LISTSERV.UGA.EDU]On Behalf Of
Carol Albright
Sent: Monday, December 18, 2000 7:07 PM
To: SPSSX-L@LISTSERV.UGA.EDU
Subject: Re: Automate a complex search
Hi, Amy!
Here's the semi-brute force method, so I'm dying to know if there's
a more
resource efficient method. First compute a flag that says the record meets
criteria. The ANY keyword permits more compact code. The DO IF
(hopefully!) speeds up the process, because once you've decided a record
meets your criteria, SPSS won't bother checking for the remaining
diagnoses. This variant looks at one code at a time across all 16
variables. (Another alternative would be look at one variable at a time
for any of the 35 codes, but I'm not sure what the maximum number of items
ANY can handle).
DO IF ANY("1234", dx1, dx2_1 to dx2_15).
compute flag = 1.
ELSE IF ANY("234C", dx1, dx2_1 to dx2_15).
compute flag = 1.
ELSE IF ANY("CODE#3", dx1, dx2_1 to dx2_15).
... (repeat this pattern for each of the 35 codes) ...
END IF.
EXECUTE.
* Now select the cases -- remember SELECT drops everything not meeting your
criteria.
SELECT IF FLAG = 1.
HTH,
Carol
At 05:21 PM 12/18/00 -0600, Amy Shadoin wrote:
<snip> I have about 7 million hospital discharge records with string
variables
>that indicate primary (dx1) and secondary (dx2_1 to dx2_15) ICD-9
>diagnoses. There are thousands of value labels within each diagnostic
>variable (dx1, dx2_1 to dx2_15).
>
> I am only interested in selecting and saving records for those
people who
>have a combination of diagnoses that include any one of about 35 ICD-9
>codes recorded within either their primary diagnosis variable or any of
>their secondary diagnosis variables.
<snip>
-------------------------------------------------------------------------
Carol L. Albright, MS | E-Mail : syzygy@tc.umn.edu
Albright Consulting | Phone : 651/699-7218
2031 Goodrich Avenue | http://www.tc.umn.edu/~syzygy
St. Paul, MN 55105 USA | Research data services
-------------------------------------------------------------------------