Manual för Epi-Info: Ex på analysprogram - SF-36
Denna sida är uppdaterad 2005-07-31

För att förstå den här sidan bör du först ha läst:

Nedan ses ett exempel på analysprogram för att räkna fram dimensioner och summaindex av enkäten SF-36. Rader som föregås av * är kommentarer som hoppas över när programmet körs. Det är ofta bra att lägga in kommentarer för sin egen skull annars kan man lätt gå vilse bland programraderna.

När man ser ett sådant här program första gången kan det verka skrämmande krångligt. Programmet består av många kommandon som körs ett i taget i en löpande följd. Varje enskilt kommando är oftast ganska enkelt att förstå. I exemplet med SF-36 blir det väldigt många kommandon och det gör att första intrycket kan vara att det är svårare att förstå än det egentligen är. Förutom att ge programkoden till att räkna på SF-36 är nedanstående programkod också ett bra exempel på följande:

Nedanför programscriptet kommer några beskrivningar av de kommandon som används som underlättar förståelsen.

(Nedanstående programscript har i skrivande stund endast genomgått en ytlig test. I nuläget kan fel inte uteslutas. Programscriptet kommer att gås igenom när tid finns. I övrigt se sidan om copyright och ansvar.)

********************************************************************
* EPI-INFO SCORING PROGRAM FÖR
* IQLA SF-36 Standard version 1.0
* (www.infovoice.se/bok/epiinfo)
*
* Följande programkod skulle kunna skrivas något kortare men
* har behållits i detta skick för att det skall vara lättare
* att förstå vad som sker.
*
* x1 eller z1 i i ett variabelnamn (oftast i slutet) betecknar
* att variabeln innehåller resultatet för första datainsamlings-
* omgången. Således kan detta programscript upprepas men att
* x1/z1 byts till x2/z2, x3/z3 etc.
*
* SF-36 är ett registretat varumärke av MEDICAL OUTCOMES TRUST.
* COPYRIGHT 1992, 1994 MEDICAL OUTCOMES TRUST. *
* ALL RIGHTS RESERVED. *
*
* Detta program räknar fram de åtta dimensionerna  och övergripande
* två index enligt manualen för SF-36. Dessutom räknas dimensionerna
* ut enligt ett alternativt förslag som tar hänsyn till att data
* är ordinaldata.
*
*******************************************************************

*******************************************************************
*** Steg 1: Inläsning av rådata ***
*******************************************************************

READ "Epi6" 'C:\Epi_Info\SF36.REC' LINKNAME=SF36
*Om data är i form av en excelfil eller annat filformat ändra
*read-kommandot
*
*Vi talar om för Epi-Info att missing data skall betecknas (.)
SET (.)="(.)"

********************************************************************
*** STEG 2: Preliminär kodning av rådata ***
*
*Missing data och värden utanför tillåtna min-max ersätts initialt
*med 0. Omkodning görs för fråga/item 1,6,7,8,9a,9d,9e,9h,11b,11d
*Data lagras tillfälligt i datatabeller som betecknas medsf36x1_
*(följt av ytterligare passande beteckning av tabellen).
*
********************************************************************

*Omkodning av item 1
*Vi börjar med att skapa en ny variabel
define q1z1
*Vi fyller den nya variabeln med värden som beror på värdet i
*den ursprungliga variabeln.
RECODE sf36x1x1 TO q1z1
1 = 5
2 = 4.4
3 = 3.4
4 = 2
5 = 1
ELSE = 0
END
*
*Vi lagrar nu den nya framräknade variabeln i en ny datatabell
*som vi kallar sf36x1_item_1. I den här nya datatabellen
*lägger vi två variabler. Förutom den nya variabeln q1z1
lägger vi också till variabeln UniqueKey som Epi-Info
*själv skapat för att hålla reda på posterna i tabellen med
*rådata. UniqueKey-variabeln använder vi längre fram när vi
*skall länka till den här nya datatabellen.
WRITE REPLACE sf36x1_item_1 UniqueKey q1z1
READ sf36
*
*Ersättning av missing data för item 2
define q2z1
RECODE sf36x2x1 TO q2z1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_2 UniqueKey q2z1
READ sf36
*
*Ersättning av missing data för item 3a
define q3az1
RECODE sf36x3ax1 TO q3az1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3b
define q3bz1
RECODE sf36x3bx1 TO q3bz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3c
define q3cz1
RECODE sf36x3cx1 TO q3cz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_3abc UniqueKey q3az1 q3bz1 q3cz1
READ sf36
*
*Ersättning av missing data för item 3d
define q3dz1
RECODE sf36x3dx1 TO q3dz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3e
define q3ez1
RECODE sf36x3ex1 TO q3ez1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3f
define q3fz1
RECODE sf36x3fx1 TO q3fz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_3def UniqueKey q3dz1 q3ez1 q3fz1
READ sf36
*
*Ersättning av missing data för item 3g
define q3gz1
RECODE sf36x3gx1 TO q3gz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3h
define q3hz1
RECODE sf36x3hx1 TO q3hz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3i
define q3iz1
RECODE sf36x3ix1 TO q3iz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
*Ersättning av missing data för item 3j
define q3jz1
RECODE sf36x3jx1 TO q3jz1
1 = 1
2 = 2
3 = 3
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_3ghij UniqueKey q3gz1 q3hz1 q3iz1 q3jz1
READ sf36
*
RELATE sf36x1_item_3abc UniqueKey::UniqueKey
RELATE sf36x1_item_3def UniqueKey::UniqueKey
RELATE sf36x1_item_3ghij UniqueKey::UniqueKey
WRITE REPLACE sf36x1_item_3 UniqueKey q3az1 q3bz1 q3cz1 q3dz1 q3ez1 q3fz1 q3gz1 q3hz1 q3iz1 q3jz1
READ sf36
DELETE TABLES sf36x1_item_3abc RUNSILENT
DELETE TABLES sf36x1_item_3def RUNSILENT
DELETE TABLES sf36x1_item_3ghij RUNSILENT
*
*Ersättning av missing data för item 4a
define q4az1
RECODE sf36x4ax1 TO q4az1
1 = 1
2 = 2
ELSE = 0
END
*
*Ersättning av missing data för item 4b
define q4bz1
RECODE sf36x4bx1 TO q4bz1
1 = 1
2 = 2
ELSE = 0
END
*
*Ersättning av missing data för item 4c
define q4cz1
RECODE sf36x4cx1 TO q4cz1
1 = 1
2 = 2
ELSE = 0
END
*
*Ersättning av missing data för item 4d
define q4dz1
RECODE sf36x4dx1 TO q4dz1
1 = 1
2 = 2
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_4 UniqueKey q4az1 q4bz1 q4cz1 q4dz1
READ sf36
*
*Ersättning av missing data för item 5a
define q5az1
RECODE sf36x5ax1 TO q5az1
1 = 1
2 = 2
ELSE = 0
END
*
*Ersättning av missing data för item 5b
define q5bz1
RECODE sf36x5bx1 TO q5bz1
1 = 1
2 = 2
ELSE = 0
END
*
*Ersättning av missing data för item 5c
define q5cz1
RECODE sf36x5cx1 TO q5cz1
1 = 1
2 = 2
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_5 UniqueKey q5az1 q5bz1 q5cz1
READ sf36
*
*Omkodning av item 6
define q6z1
RECODE sf36x6x1 TO q6z1
1 = 5
2 = 4
3 = 3
4 = 2
5 = 1
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_6 UniqueKey q6z1
READ sf36
*
*Omkodning av item 7
define q7z1
RECODE sf36x7x1 TO q7z1
1 = 6
2 = 5.4
3 = 4.2
4 = 3.1
5 = 2.2
6 = 1
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_7 UniqueKey q7z1
READ sf36
*
*Omkodning av item 8
define q8z1
IF SF36X7X1=1 AND SF36X8X1=1 THEN
ASSIGN q8z1=6
END
*
IF SF36X7X1>1 AND SF36X8X1=1 THEN
ASSIGN q8z1=5
END
IF SF36X7X1>0 AND SF36X8X1=2 THEN
ASSIGN q8z1=4
END
*
WRITE REPLACE sf36x1_item_8_temp1 UniqueKey q8z1
READ sf36
RELATE sf36x1_item_8_temp1 UniqueKey::UniqueKey
*
IF SF36X7X1>0 AND SF36X8X1=3 THEN
ASSIGN q8z1=3
END
*
IF SF36X7X1>0 AND SF36X8X1=4 THEN
ASSIGN q8z1=2
END
IF SF36X7X1>0 AND SF36X8X1=5 THEN
ASSIGN q8z1=1
END
*
WRITE REPLACE sf36x1_item_8_temp2 UniqueKey q8z1
READ sf36
RELATE sf36x1_item_8_temp2 UniqueKey::UniqueKey
DELETE TABLES sf36x1_item_8_temp1 RUNSILENT
*
IF SF36X7X1=(.) AND SF36X8X1=1 THEN
ASSIGN q8z1=6
END
IF SF36X7X1=(.) AND SF36X8X1=2 THEN
ASSIGN q8z1=4.75
END
IF SF36X7X1=(.) AND SF36X8X1=3 THEN
ASSIGN q8z1=3.5
END
*
WRITE REPLACE sf36x1_item_8_temp3 UniqueKey q8z1
READ sf36
RELATE sf36x1_item_8_temp3 UniqueKey::UniqueKey
DELETE TABLES sf36x1_item_8_temp2 RUNSILENT
*
IF SF36X7X1=(.) AND SF36X8X1=4 THEN
ASSIGN q8z1=2.25
END
IF SF36X7X1=(.) AND SF36X8X1=5 THEN
ASSIGN q8z1=1
END
IF SF36X8X1=(.) THEN
ASSIGN q8z1=0
END
*
WRITE REPLACE sf36x1_item_8 UniqueKey q8z1
READ sf36
DELETE TABLES sf36x1_item_8_temp3 RUNSILENT
*
*Omkodning av item 9a
define q9az1
RECODE sf36x9ax1 TO q9az1
1 = 6
2 = 5
3 = 4
4 = 3
5 = 2
6 = 1
ELSE = 0
END
*
*Ersättning av missing data för item 9b
define q9bz1
RECODE sf36x9bx1 TO q9bz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
ELSE = 0
END
*
*Ersättning av missing data för 9c
define q9cz1
RECODE sf36x9cx1 TO q9cz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_9abc UniqueKey q9az1 q9bz1 q9cz1
READ sf36
*
*Omkodning av item 9d
define q9dz1
RECODE sf36x9dx1 TO q9dz1
1 = 6
2 = 5
3 = 4
4 = 3
5 = 2
6 = 1
ELSE = 0
END
*
*Omkodning av item 9e
define q9ez1
RECODE sf36x9ex1 TO q9ez1
1 = 6
2 = 5
3 = 4
4 = 3
5 = 2
6 = 1
ELSE = 0
END
*
*Ersättning av missing data för item 9f
define q9fz1
RECODE sf36x9fx1 TO q9fz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_9def UniqueKey q9dz1 q9ez1 q9fz1
READ sf36
*
*Ersättning av missing data för item 9g
define q9gz1
RECODE sf36x9gx1 TO q9gz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
ELSE = 0
END
*
*Omkodning av item 9h
define q9hz1
RECODE sf36x9hx1 TO q9hz1
1 = 6
2 = 5
3 = 4
4 = 3
5 = 2
6 = 1
ELSE = 0
END
*
*Ersättning av missing data för item 9i
define q9iz1
RECODE sf36x9ix1 TO q9iz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_9ghi UniqueKey q9gz1 q9hz1 q9iz1
READ sf36
*
RELATE sf36x1_item_9abc UniqueKey::UniqueKey
RELATE sf36x1_item_9def UniqueKey::UniqueKey
RELATE sf36x1_item_9ghi UniqueKey::UniqueKey
WRITE REPLACE sf36x1_item_9 UniqueKey q9az1 q9bz1 q9cz1 q9dz1 q9ez1 q9fz1 q9gz1 q9hz1 q9iz1
READ sf36
DELETE TABLES sf36x1_item_9abc RUNSILENT
DELETE TABLES sf36x1_item_9def RUNSILENT
DELETE TABLES sf36x1_item_9ghi RUNSILENT
*
*Ersättning av missing data för item 10
define q10z1
RECODE sf36x10x1 TO q10z1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_10 UniqueKey q10z1
READ sf36
*
*Ersättning av missing data för item 11a
define q11az1
RECODE sf36x11ax1 TO q11az1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
ELSE = 0
END
*
*Omkodning av item 11b
define q11bz1
RECODE sf36x11bx1 TO q11bz1
1 = 5
2 = 4
3 = 3
4 = 2
5 = 1
ELSE = 0
END
*
*Ersättning av missing data för item 11c
define q11cz1
RECODE sf36x11cx1 TO q11cz1
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
ELSE = 0
END
*
*Omkodning av item 11d
define q11dz1
RECODE sf36x11dx1 TO q11dz1
1 = 5
2 = 4
3 = 3
4 = 2
5 = 1
ELSE = 0
END
*
WRITE REPLACE sf36x1_item_11 UniqueKey q11az1 q11bz1 q11cz1 q11dz1
*
*
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*
*****************************************************
*** Step 3a - Physical functioning (PF):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen PF
READ sf36
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
define c3aX1
IF q3az1=0 THEN
ASSIGN c3aX1=0
ELSE
ASSIGN c3aX1=1
END
define c3bX1
IF q3bz1=0 THEN
ASSIGN c3bX1=0
ELSE
ASSIGN c3bX1=1
END
define c3cX1
IF q3cz1=0 THEN
ASSIGN c3cX1=0
ELSE
ASSIGN c3cX1=1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
define c3dX1
IF q3dz1=0 THEN
ASSIGN c3dX1=0
ELSE
ASSIGN c3dX1=1
END
define c3eX1
IF q3ez1=0 THEN
ASSIGN c3eX1=0
ELSE
ASSIGN c3eX1=1
END
define c3fX1
IF q3fz1=0 THEN
ASSIGN c3fX1=0
ELSE
ASSIGN c3fX1=1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
define c3gX1
IF q3gz1=0 THEN
ASSIGN c3gX1=0
ELSE
ASSIGN c3gX1=1
END
define c3hX1
IF q3hz1=0 THEN
ASSIGN c3hX1=0
ELSE
ASSIGN c3hX1=1
END
define c3iX1
IF q3iz1=0 THEN
ASSIGN c3iX1=0
ELSE
ASSIGN c3iX1=1
END
define c3jX1
IF q3jz1=0 THEN
ASSIGN c3jX1=0
ELSE
ASSIGN c3jX1=1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1 c3gx1 c3hX1 c3iX1 c3jX1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
*Variabeln check_pf1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen PF
define check_pf1x1
assign check_pf1x1=c3ax1+c3bX1+c3cX1+c3dX1+c3eX1+c3fX1+c3gx1+c3hX1+c3iX1+c3jX1
*
*Nu räknar vi ut medelsvaret i dimensionen PF
define check_pf2x1
assign check_pf2x1=q3az1+q3bz1+q3cz1+q3dz1+q3ez1+q3fz1+q3gz1+q3hz1+q3iz1+q3jz1
define check_pf3x1
assign check_pf3x1=check_pf2x1/check_pf1x1
*
*Nu ersätter vi missing data med medelsvaret inom PF
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_pf1x1>5 AND q3az1=0 THEN
ASSIGN q3az1=check_pf3x1
END
IF check_pf1x1>5 AND q3bz1=0 THEN
ASSIGN q3bz1=check_pf3x1
END
IF check_pf1x1>5 AND q3cz1=0 THEN
ASSIGN q3cz1=check_pf3x1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1 c3gx1 c3hX1 c3iX1 c3jX1 check_pf1x1 check_pf3x1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
IF check_pf1x1>5 AND q3dz1=0 THEN
ASSIGN q3dz1=check_pf3x1
END
IF check_pf1x1>5 AND q3ez1=0 THEN
ASSIGN q3ez1=check_pf3x1
END
IF check_pf1x1>5 AND q3fz1=0 THEN
ASSIGN q3fz1=check_pf3x1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1 c3gx1 c3hX1 c3iX1 c3jX1 check_pf1x1 check_pf3x1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
IF check_pf1x1>5 AND q3gz1=0 THEN
ASSIGN q3gz1=check_pf3x1
END
IF check_pf1x1>5 AND q3hz1=0 THEN
ASSIGN q3hz1=check_pf3x1
END
IF check_pf1x1>5 AND q3iz1=0 THEN
ASSIGN q3iz1=check_pf3x1
END
IF check_pf1x1>5 AND q3jz1=0 THEN
ASSIGN q3jz1=check_pf3x1
END
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1 c3gx1 c3hX1 c3iX1 c3jX1 check_pf1x1 check_pf3x1
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_pfx1
IF check_pf1x1>5 THEN
ASSIGN rs_pfx1=q3az1+q3bz1+q3cz1+q3dz1+q3ez1+q3fz1+q3gz1+q3hz1+q3iz1+q3jz1
ELSE
ASSIGN rs_pfx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_pfx1
ASSIGN ts_pfx1=((rs_pfx1-10)/20)*100
*
WRITE REPLACE sf36x1_dim_pf UniqueKey c3ax1 c3bX1 c3cX1 c3dX1 c3eX1 c3fX1 c3gx1 c3hX1 c3iX1 c3jX1 check_pf1x1 check_pf3x1 rs_pfx1 ts_pfx1
*
*
*
*****************************************************
*** Step 3b - Role Physical (RP):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen RP
READ sf36
RELATE sf36x1_item_4 UniqueKey::UniqueKey
*
define c4aX1
IF q4az1=0 THEN
ASSIGN c4aX1=0
ELSE
ASSIGN c4aX1=1
END
define c4bX1
IF q4bz1=0 THEN
ASSIGN c4bX1=0
ELSE
ASSIGN c4bX1=1
END
define c4cX1
IF q4cz1=0 THEN
ASSIGN c4cX1=0
ELSE
ASSIGN c4cX1=1
END
define c4dX1
IF q4dz1=0 THEN
ASSIGN c4dX1=0
ELSE
ASSIGN c4dX1=1
END
*
WRITE REPLACE sf36x1_dim_rp UniqueKey c4ax1 c4bX1 c4cX1 c4dX1
READ sf36
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_item_4 UniqueKey::UniqueKey
*
*Variabeln check_rp1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen RP
define check_rp1x1
assign check_rp1x1=c4ax1+c4bX1+c4cX1+c4dX1
*
*Nu räknar vi ut medelsvaret i dimensionen RP
define check_rp2x1
assign check_rp2x1=q4az1+q4bz1+q4cz1+q4dz1
define check_rp3x1
assign check_rp3x1=check_rp2x1/check_rp1x1
*
*Nu ersätter vi missing data med medelsvaret inom RP
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_rp1x1>2 AND q4az1=0 THEN
ASSIGN q4az1=check_rp3x1
END
IF check_rp1x1>2 AND q4bz1=0 THEN
ASSIGN q4bz1=check_rp3x1
END
IF check_rp1x1>2 AND q4cz1=0 THEN
ASSIGN q4cz1=check_rp3x1
END
IF check_rp1x1>2 AND q4dz1=0 THEN
ASSIGN q4dz1=check_rp3x1
END
*
WRITE REPLACE sf36x1_dim_rp UniqueKey c4ax1 c4bX1 c4cX1 c4dX1 check_rp1x1 check_rp3x1
READ sf36
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_item_4 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_rpx1
IF check_rp1x1>2 THEN
ASSIGN rs_rpx1=q4az1+q4bz1+q4cz1+q4dz1
ELSE
ASSIGN rs_rpx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_rpx1
ASSIGN ts_rpx1=((rs_rpx1-4)/4)*100
*
WRITE REPLACE sf36x1_dim_rp UniqueKey c4ax1 c4bX1 c4cX1 c4dX1 check_rp1x1 check_rp3x1 rs_rpx1 ts_rpx1
*
*
*
*****************************************************
*** Step 3c - Bodily Pain (BP):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen BP
READ sf36
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
*
define c7X1
IF q7z1=0 THEN
ASSIGN c7X1=0
ELSE
ASSIGN c7X1=1
END
define c8X1
IF q8z1=0 THEN
ASSIGN c8X1=0
ELSE
ASSIGN c8X1=1
END
*
WRITE REPLACE sf36x1_dim_bp UniqueKey c7x1 c8X1
READ sf36
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
*
*Variabeln check_bp1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen BP
define check_bp1x1
assign check_bp1x1=c7x1+c8X1
*
*Nu räknar vi ut medelsvaret i dimensionen BP
define check_bp2x1
assign check_bp2x1=q7z1+q8z1
define check_bp3x1
assign check_bp3x1=check_bp2x1/check_bp1x1
*
*Nu ersätter vi missing data med medelsvaret inom BP
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_bp1x1>1 AND q7z1=0 THEN
ASSIGN q7z1=check_bp3x1
END
IF check_bp1x1>1 AND q8z1=0 THEN
ASSIGN q8z1=check_bp3x1
END
*
WRITE REPLACE sf36x1_dim_bp UniqueKey c7x1 c8X1 check_bp1x1 check_bp3x1
READ sf36
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_bpx1
IF check_bp1x1>1 THEN
ASSIGN rs_bpx1=q7z1+q8z1
ELSE
ASSIGN rs_bpx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_bpx1
ASSIGN ts_bpx1=((rs_bpx1-4)/4)*100
*
WRITE REPLACE sf36x1_dim_bp UniqueKey c7x1 c8X1 check_bp1x1 check_bp3x1 rs_bpx1 ts_bpx1
*
*
*
*****************************************************
*** Step 3d - Dimension General Health (GH):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen GH
READ sf36
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
define c1X1
IF q1z1=0 THEN
ASSIGN c1X1=0
ELSE
ASSIGN c1X1=1
END
define c11aX1
IF q11az1=0 THEN
ASSIGN c11aX1=0
ELSE
ASSIGN c11aX1=1
END
define c11bX1
IF q11bz1=0 THEN
ASSIGN c11bX1=0
ELSE
ASSIGN c11bX1=1
END
*
WRITE REPLACE sf36x1_dim_gh UniqueKey c1x1 c11aX1 c11bX1
READ sf36
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
define c11cX1
IF q11cz1=0 THEN
ASSIGN c11cX1=0
ELSE
ASSIGN c11cX1=1
END
define c11dX1
IF q11dz1=0 THEN
ASSIGN c11dX1=0
ELSE
ASSIGN c11dX1=1
END
*
WRITE REPLACE sf36x1_dim_gh UniqueKey c1x1 c11aX1 c11bX1 c11cX1 c11dX1
READ sf36
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
*Variabeln check_gh1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen GH
define check_gh1x1
assign check_gh1x1=c1X1+c11aX1+c11bX1+c11cX1+c11dX1
*
*Nu räknar vi ut medelsvaret i dimensionen GH
define check_gh2x1
assign check_gh2x1=q1z1+q11az1+q11bz1+q11cz1+q11dz1
define check_gh3x1
assign check_gh3x1=check_gh2x1/check_gh1x1
*
*Nu ersätter vi missing data med medelsvaret inom GH
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_gh1x1>2 AND q1z1=0 THEN
ASSIGN q1z1=check_gh3x1
END
IF check_gh1x1>2 AND q11az1=0 THEN
ASSIGN q11az1=check_gh3x1
END
IF check_gh1x1>2 AND q11bz1=0 THEN
ASSIGN q11bz1=check_gh3x1
END
*
WRITE REPLACE sf36x1_dim_gh UniqueKey c1x1 c11aX1 c11bX1 c11cX1 c11dX1 check_gh1x1 check_gh3x1
READ sf36
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
IF check_gh1x1>2 AND q11cz1=0 THEN
ASSIGN q11cz1=check_gh3x1
END
IF check_gh1x1>2 AND q11dz1=0 THEN
ASSIGN q11dz1=check_gh3x1
END
*
WRITE REPLACE sf36x1_dim_gh UniqueKey c1x1 c11aX1 c11bX1 c11cX1 c11dX1 check_gh1x1 check_gh3x1
READ sf36
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_ghx1
IF check_gh1x1>2 THEN
ASSIGN rs_ghx1=q1z1+q11az1+q11bz1+q11cz1+q11dz1
ELSE
ASSIGN rs_ghx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_ghx1
ASSIGN ts_ghx1=((rs_ghx1-5)/20)*100
*
WRITE REPLACE sf36x1_dim_gh UniqueKey c1x1 c11aX1 c11bX1 c11cX1 c11dX1 check_gh1x1 check_gh3x1 rs_ghx1 ts_ghx1
*
*
*
*****************************************************
*** Step 3e - Vitality (VT):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen VT
READ sf36
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
define c9aX1
IF q9az1=0 THEN
ASSIGN c9aX1=0
ELSE
ASSIGN c9aX1=1
END
define c9eX1
IF q9ez1=0 THEN
ASSIGN c9eX1=0
ELSE
ASSIGN c9eX1=1
END
define c9gX1
IF q9gz1=0 THEN
ASSIGN c9gX1=0
ELSE
ASSIGN c9gX1=1
END
define c9iX1
IF q9iz1=0 THEN
ASSIGN c9iX1=0
ELSE
ASSIGN c9iX1=1
END
*
WRITE REPLACE sf36x1_dim_vt UniqueKey c9ax1 c9eX1 c9gX1 c9iX1
READ sf36
RELATE sf36x1_dim_vt UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Variabeln check_vt1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen VT
define check_vt1x1
assign check_vt1x1=c9ax1+c9eX1+c9gX1+c9iX1
*
*Nu räknar vi ut medelsvaret i dimensionen VT
define check_vt2x1
assign check_vt2x1=q9az1+q9ez1+q9gz1+q9iz1
define check_vt3x1
assign check_vt3x1=check_vt2x1/check_vt1x1
*
*Nu ersätter vi missing data med medelsvaret inom VT
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_vt1x1>2 AND q9az1=0 THEN
ASSIGN q9az1=check_vt3x1
END
IF check_vt1x1>2 AND q9ez1=0 THEN
ASSIGN q9ez1=check_vt3x1
END
IF check_vt1x1>2 AND q9gz1=0 THEN
ASSIGN q9gz1=check_vt3x1
END
IF check_vt1x1>2 AND q9iz1=0 THEN
ASSIGN q9iz1=check_vt3x1
END
*
WRITE REPLACE sf36x1_dim_vt UniqueKey c9ax1 c9eX1 c9gX1 c9iX1 check_vt1x1 check_vt3x1
READ sf36
RELATE sf36x1_dim_vt UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_vtx1
IF check_vt1x1>2 THEN
ASSIGN rs_vtx1=q9az1+q9ez1+q9gz1+q9iz1
ELSE
ASSIGN rs_vtx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_vtx1
ASSIGN ts_vtx1=((rs_vtx1-4)/20)*100
*
WRITE REPLACE sf36x1_dim_vt UniqueKey c9ax1 c9eX1 c9gX1 c9iX1 check_vt1x1 check_vt3x1 rs_vtx1 ts_vtx1
*
*
*
*****************************************************
*** Step 3f - Social functioning (SF):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen SF
READ sf36
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
*
define c6X1
IF q6z1=0 THEN
ASSIGN c6X1=0
ELSE
ASSIGN c6X1=1
END
define c10X1
IF q10z1=0 THEN
ASSIGN c10X1=0
ELSE
ASSIGN c10X1=1
END
*
WRITE REPLACE sf36x1_dim_sf UniqueKey c6x1 c10X1
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
*
*Variabeln check_sf1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen SF
define check_sf1x1
assign check_sf1x1=c6x1+c10X1
*
*Nu räknar vi ut medelsvaret i dimensionen SF
define check_sf2x1
assign check_sf2x1=q6z1+q10z1
define check_sf3x1
assign check_sf3x1=check_sf2x1/check_sf1x1
*
*Nu ersätter vi missing data med medelsvaret inom SF
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_sf1x1>1 AND q6z1=0 THEN
ASSIGN q6z1=check_sf3x1
END
IF check_sf1x1>1 AND q10z1=0 THEN
ASSIGN q10z1=check_sf3x1
END
*
WRITE REPLACE sf36x1_dim_sf UniqueKey c6x1 c10X1 check_sf1x1 check_sf3x1
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_sfx1
IF check_sf1x1>1 THEN
ASSIGN rs_sfx1=q6z1+q10z1
ELSE
ASSIGN rs_sfx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_sfx1
ASSIGN ts_sfx1=((rs_sfx1-2)/8)*100
*
WRITE REPLACE sf36x1_dim_sf UniqueKey c6x1 c10X1 check_sf1x1 check_sf3x1 rs_sfx1 ts_sfx1
*
*
*
*****************************************************
*** Step 3g - Role emotional (RE):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen RE
READ sf36
RELATE sf36x1_item_5 UniqueKey::UniqueKey
*
define c5aX1
IF q5az1=0 THEN
ASSIGN c5aX1=0
ELSE
ASSIGN c5aX1=1
END
define c5bX1
IF q5bz1=0 THEN
ASSIGN c5bX1=0
ELSE
ASSIGN c5bX1=1
END
define c5cX1
IF q5cz1=0 THEN
ASSIGN c5cX1=0
ELSE
ASSIGN c5cX1=1
END
*
WRITE REPLACE sf36x1_dim_re UniqueKey c5ax1 c5bX1 c5cX1
READ sf36
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_item_5 UniqueKey::UniqueKey
*
*Variabeln check_re1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen RE
define check_re1x1
assign check_re1x1=c5ax1+c5bX1+c5cX1
*
*Nu räknar vi ut medelsvaret i dimensionen RE
define check_re2x1
assign check_re2x1=q5az1+q5bz1+q5cz1
define check_re3x1
assign check_re3x1=check_re2x1/check_re1x1
*
*Nu ersätter vi missing data med medelsvaret inom RE
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_re1x1>1 AND q5az1=0 THEN
ASSIGN q5az1=check_re3x1
END
IF check_re1x1>1 AND q5bz1=0 THEN
ASSIGN q5bz1=check_re3x1
END
IF check_re1x1>1 AND q5cz1=0 THEN
ASSIGN q5cz1=check_re3x1
END
*
WRITE REPLACE sf36x1_dim_re UniqueKey c5ax1 c5bX1 c5cX1 check_re1x1 check_re3x1
READ sf36
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_item_5 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_rex1
IF check_re1x1>1 THEN
ASSIGN rs_rex1=q5az1+q5bz1+q5cz1
ELSE
ASSIGN rs_rex1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_rex1
ASSIGN ts_rex1=((rs_rex1-3)/3)*100
*
WRITE REPLACE sf36x1_dim_re UniqueKey c5ax1 c5bX1 c5cX1 check_re1x1 check_re3x1 rs_rex1 ts_rex1
*
*
*
*****************************************************
*** Step 3h - Mental health (MH):
*** Hantering av missing data
*** Beräkning av "Raw Scale Scores"
*** Transformering av "Raw Scale Scores"
***
****************************************************
*
*Beräkning av svarsfrekvens för dimensionen MH
READ sf36
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
define c9bX1
IF q9bz1=0 THEN
ASSIGN c9bX1=0
ELSE
ASSIGN c9bX1=1
END
define c9cX1
IF q9cz1=0 THEN
ASSIGN c9cX1=0
ELSE
ASSIGN c9cX1=1
END
define c9dX1
IF q9dz1=0 THEN
ASSIGN c9dX1=0
ELSE
ASSIGN c9dX1=1
END
*
WRITE REPLACE sf36x1_dim_mh UniqueKey c9bx1 c9cX1 c9dX1
READ sf36
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
define c9fX1
IF q9fz1=0 THEN
ASSIGN c9fX1=0
ELSE
ASSIGN c9fX1=1
END
define c9hX1
IF q9hz1=0 THEN
ASSIGN c9hX1=0
ELSE
ASSIGN c9hX1=1
END
*
WRITE REPLACE sf36x1_dim_mh UniqueKey c9bx1 c9cX1 c9dX1 c9fX1 c9hX1
READ sf36
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Variabeln check_mh1x1 som vi nu skall skapa representerar
*antalet svar bland alla item i dimensionen MH
define check_mh1x1
assign check_mh1x1=c9bx1+c9cX1+c9dX1+c9fX1+c9hX1
*
*Nu räknar vi ut medelsvaret i dimensionen MH
define check_mh2x1
assign check_mh2x1=q9bz1+q9cz1+q9dz1+q9fz1+q9hz1
define check_mh3x1
assign check_mh3x1=check_mh2x1/check_mh1x1
*
*Nu ersätter vi missing data med medelsvaret inom MH
*förutsatt att minst hälften av frågorna inom denna
*dimension är besvarad
*
IF check_mh1x1>2 AND q9bz1=0 THEN
ASSIGN q9bz1=check_mh3x1
END
IF check_mh1x1>2 AND q9cz1=0 THEN
ASSIGN q9cz1=check_mh3x1
END
IF check_mh1x1>2 AND q9dz1=0 THEN
ASSIGN q9dz1=check_mh3x1
END
*
WRITE REPLACE sf36x1_dim_mh UniqueKey c9bx1 c9cX1 c9dX1 c9fX1 c9hX1 check_mh1x1 check_mh3x1
READ sf36
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
IF check_mh1x1>2 AND q9fz1=0 THEN
ASSIGN q9fz1=check_mh3x1
END
IF check_mh1x1>2 AND q9hz1=0 THEN
ASSIGN q9hz1=check_mh3x1
END
*
WRITE REPLACE sf36x1_dim_mh UniqueKey c9bx1 c9cX1 c9dX1 c9fX1 c9hX1 check_mh1x1 check_mh3x1
READ sf36
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Nu beräknar vi Raw scale scores
*om antalet svar inom denna dimension är <50%
*anger vi raw score som missing data, dvs (.)
define rs_mhx1
IF check_mh1x1>2 THEN
ASSIGN rs_mhx1=q9bz1+q9cz1+q9dz1+q9fz1+q9hz1
ELSE
ASSIGN rs_mhx1=(.)
END
*
*Nu beräknar vi transformed scores för denna dimension
*Om raw score är missing (.) blir automatiskt transformed
*score också missing.
define ts_mhx1
ASSIGN ts_mhx1=((rs_mhx1-5)/25)*100
*
WRITE REPLACE sf36x1_dim_mh UniqueKey c9bx1 c9cX1 c9dX1 c9fX1 c9hX1 check_mh1x1 check_mh3x1 rs_mhx1 ts_mhx1
*
*
*
*****************************************************
*** Step 3i - Reported health transition:
*** Handling missing values
***
****************************************************
*
*Reported health transition är en fråga som inte
*ingår i någon av de åtta dimensionerna. Denna
*fråga står för sig själv. Emellertid vill vi koda
*om alla "out of range"-svar till missing data.
READ sf36
RELATE sf36x1_item_2 UniqueKey::UniqueKey
*
IF q2z1=0 THEN
ASSIGN q2z1=(.)
END
WRITE REPLACE sf36x1_item_2 UniqueKey q2z1
*
*
*
*****************************************************
*** Step 4 - Physical component summary scale (PCS)
*** Mental component summary scale (MCS)
*** (summaindex för fysisk respektive
*** mental hälsa)
*** a) z-transformering av dimensionerna
*** b) Beräkna "Raw PCS/MCS"
*** c) Convertering till t-fördelning
***
****************************************************
*
Read sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_dim_vt UniqueKey::UniqueKey
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
*
*Varje dimension (delskala) omvandlas till ett
*z-värde med medelvärden och standardavikelser
*från svensk normalbefolkning
DEFINE pf_z_x1
DEFINE rp_z_x1
DEFINE bp_z_x1
DEFINE gh_z_x1
DEFINE vt_z_x1
DEFINE sf_z_x1
DEFINE re_z_x1
DEFINE mh_z_x1
*
ASSIGN pf_z_x1=(ts_pfx1-88.7525706)/18.6442611
ASSIGN rp_z_x1=(ts_rpx1-83.7768616)/31.2734740
ASSIGN bp_z_x1=(ts_bpx1-75.4765117)/25.5835861
ASSIGN gh_z_x1=(ts_ghx1-76.3587061)/21.8602956
ASSIGN vt_z_x1=(ts_vtx1-69.3126353)/22.3715553
ASSIGN sf_z_x1=(ts_sfx1-89.1569840)/19.7942702
ASSIGN re_z_x1=(ts_rex1-86.0382309)/28.9198771
ASSIGN mh_z_x1=(ts_mhx1-81.2933950)/18.5775199
*
*De framtagna z-värdena viktas och preliminära
*summaindex räknas fram. Om någon av
*dimensionerna (delskalorna) är missing blir
*raw index också missing.
DEFINE rawPCSx1
ASSIGN rawPCSx1=(pf_z_x1*0.42402)+(rp_z_x1*0.35119)+(bp_z_x1*0.31754)+(sf_z_x1*(-0.00753))+(mh_z_x1*(-0.22069))+(re_z_x1*(-0.19206))+(vt_z_x1*0.02877)+(gh_z_x1*0.24954)
DEFINE rawMCSx1
ASSIGN rawMCSx1=(pf_z_x1*(-0.22999))+(rp_z_x1*(-0.12329))+(bp_z_x1*(-0.09731))+(sf_z_x1*0.26876)+(mh_z_x1*0.48581)+(re_z_x1*0.43407)+(vt_z_x1*0.23534)+(gh_z_x1*(-0.01571))
*
*De preliminära summaindex omvandlas till en
*t-fördelning med medelvärde=50 och
*standardavvikelse 10.
DEFINE sf36_PCSx1
DEFINE sf36_MCSx1
*
ASSIGN sf36_PCSx1=(rawPCSx1*10)+50
ASSIGN sf36_MCSx1=(rawMCSx1*10)+50
*
WRITE REPLACE sf36x1_summary UniqueKey pf_z_x1 rp_z_x1 bp_z_x1 gh_z_x1 vt_z_x1 sf_z_x1 re_z_x1 mh_z_x1 rawPCSx1 rawMCSx1 sf36_PCSx1 sf36_MCSx1
*
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*
*****************************************************
*** Step 5a - Physical functioning (PF):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
RELATE sf36x1_item_3 UniqueKey::UniqueKey
*
*Dimensionen PF består av flera frågor där den
*svarande ombeds bejaka eller förneka närvaron
*av vissa funktionshinder. Frågorna har en
*stigande skala av besvär som kan rangordnas.
*Första frågan där man får svar på en fysisk
*begränsning blir värdet för denna dimensionen.
*Vi kräver även att minst hälften av frågorna
*i denna dimension skall vara besvarade.
DEFINE sf36x1_dim_es_pf
IF check_pf1x1>5 AND q3jz1=3 THEN
ASSIGN sf36x1_dim_es_pf=1
ELSE
ASSIGN sf36x1_dim_es_pf=(.)
END
IF check_pf1x1>5 AND q3iz1=3 THEN
ASSIGN sf36x1_dim_es_pf=2
END
IF check_pf1x1>5 AND q3hz1=3 THEN
ASSIGN sf36x1_dim_es_pf=3
END
*
WRITE REPLACE sf36x1_dim_es_pf UniqueKey sf36x1_dim_es_pf
*
IF check_pf1x1>5 AND q3gz1=3 THEN
ASSIGN sf36x1_dim_es_pf=4
END
IF check_pf1x1>5 AND q3fz1=3 THEN
ASSIGN sf36x1_dim_es_pf=5
END
IF check_pf1x1>5 AND q3ez1=3 THEN
ASSIGN sf36x1_dim_es_pf=6
END
*
WRITE REPLACE sf36x1_dim_es_pf UniqueKey sf36x1_dim_es_pf
*
*
IF check_pf1x1>5 AND q3dz1=3 THEN
ASSIGN sf36x1_dim_es_pf=7
END
IF check_pf1x1>5 AND q3cz1=3 THEN
ASSIGN sf36x1_dim_es_pf=8
END
IF check_pf1x1>5 AND q3bz1=3 THEN
ASSIGN sf36x1_dim_es_pf=9
END
IF check_pf1x1>5 AND q3az1=3 THEN
ASSIGN sf36x1_dim_es_pf=10
END
*
WRITE REPLACE sf36x1_dim_es_pf UniqueKey sf36x1_dim_es_pf
*
*
*
*****************************************************
*** Step 5b - Role Physical(RP):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_item_4 UniqueKey::UniqueKey
*
*Dimensionen RP består av flera frågor där den
*svarande ombeds bejaka eller förneka närvaron
*av vissa konsekvenser. Frågorna har inte en
*stigande skala av besvär som kan rangordnas.
*Summan av antalet jakande svar blir värdet
*för denna dimensionen. Denna dimension kan
*alltså variera mellan 0-4. Vi kodar så att
*4 är bra (frånvaro av ja-svar).
*Vi kräver även att minst hälften av frågorna
*i denna dimension skall vara besvarade.
Define q4a_es_z1
IF check_rp1x1>2 AND q4az1=2 THEN
ASSIGN q4a_es_z1=1
ELSE
ASSIGN q4a_es_z1=(.)
END
IF check_rp1x1>2 AND q4az1=1 THEN
ASSIGN q4a_es_z1=0
END
*
Define q4b_es_z1
IF check_rp1x1>2 AND q4bz1=2 THEN
ASSIGN q4b_es_z1=1
ELSE
ASSIGN q4b_es_z1=(.)
END
IF check_rp1x1>2 AND q4bz1=1 THEN
ASSIGN q4b_es_z1=0
END
*
WRITE REPLACE sf36x1_dim_es_rp_temp UniqueKey q4a_es_z1 q4b_es_z1
*
READ sf36
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_item_4 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_rp_temp UniqueKey::UniqueKey
*
Define q4c_es_z1
IF check_rp1x1>2 AND q4cz1=2 THEN
ASSIGN q4c_es_z1=1
ELSE
ASSIGN q4c_es_z1=(.)
END
IF check_rp1x1>2 AND q4cz1=1 THEN
ASSIGN q4c_es_z1=0
END
*
Define q4d_es_z1
IF check_rp1x1>2 AND q4dz1=2 THEN
ASSIGN q4d_es_z1=1
ELSE
ASSIGN q4d_es_z1=(.)
END
IF check_rp1x1>2 AND q4dz1=1 THEN
ASSIGN q4d_es_z1=0
END
*
WRITE REPLACE sf36x1_dim_es_rp_temp UniqueKey q4a_es_z1 q4b_es_z1 q4c_es_z1 q4d_es_z1
*
READ sf36
RELATE sf36x1_dim_rp UniqueKey::UniqueKey
RELATE sf36x1_item_4 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_rp_temp UniqueKey::UniqueKey
*
DEFINE sf36x1_dim_es_rp
ASSIGN sf36x1_dim_es_rp=q4a_es_z1+q4b_es_z1+q4c_es_z1+q4d_es_z1
*
WRITE REPLACE sf36x1_dim_es_rp UniqueKey sf36x1_dim_es_rp
DELETE TABLES sf36x1_dim_es_rp_temp RUNSILENT
*
*
*
*****************************************************
*** Step 5c - Bodily Pain(BP):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
*
*Dimensionen BP består av två frågor med olika
*svarsskalor. Dessa två frågor kan därför inte
*naturligt kan slås samman till en skala.
*Vi sätter svaren på fråga 7 som kolumner och
*svaren på fråga 8 som rader i en tabell. De
*olika rutorna ges en siffra från 1-7 (motsvarar
*E Svenssons G-A) där 7 anger inga besvär och
*1 högsta tänkbara besvär.
*Vi kräver även att båda frågorna
*i denna dimension skall vara besvarade för
*att vi skall räkna fram denna dimension.
*
DEFINE sf36x1_dim_es_bp
*
IF q7z1<2.5 AND q8z1<2.5 THEN
ASSIGN sf36x1_dim_es_bp=1
END
IF q7z1>2.5 OR q8z1>2.5 THEN
ASSIGN sf36x1_dim_es_bp=2
END
IF q7z1>4 OR q8z1>3.5 THEN
ASSIGN sf36x1_dim_es_bp=3
END
*
WRITE REPLACE sf36x1_dim_es_bp UniqueKey sf36x1_dim_es_bp
*
READ sf36
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_bp UniqueKey::UniqueKey
*
IF q7z1>2.5 AND q8z1>2.5 THEN
ASSIGN sf36x1_dim_es_bp=5
END
IF q7z1=3.1 AND q8z1=3 THEN
ASSIGN sf36x1_dim_es_bp=4
END
IF q7z1>3.5 AND q8z1>3.5 THEN
ASSIGN sf36x1_dim_es_bp=6
END
*
WRITE REPLACE sf36x1_dim_es_bp UniqueKey sf36x1_dim_es_bp
*
READ sf36
RELATE sf36x1_dim_bp UniqueKey::UniqueKey
RELATE sf36x1_item_7 UniqueKey::UniqueKey
RELATE sf36x1_item_8 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_bp UniqueKey::UniqueKey
*
IF q7z1=6 THEN
ASSIGN sf36x1_dim_es_bp=7
END
*
*Om inte både fråga 7 och 8 är besvarad
*sätter vi missing data på denna dimension
IF q7z1=0 OR q8z1=0 THEN
ASSIGN sf36x1_dim_es_bp=(.)
END
*
WRITE REPLACE sf36x1_dim_es_bp UniqueKey sf36x1_dim_es_bp
*
*
*
*****************************************************
*** Step 5d - General Health(GH):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_gh UniqueKey::UniqueKey
RELATE sf36x1_item_1 UniqueKey::UniqueKey
RELATE sf36x1_item_11 UniqueKey::UniqueKey
*
*Dimensionen GH består av fem frågor där den
*första (item 1) har en annorlunda svarsskala
*än de övriga (11a-d).
*Vi kräver även att båda frågorna
*i denna dimension skall vara besvarade för
*att vi skall räkna fram denna dimension.
*

*(Koden för att räkna ut denna dimension
*enligt E. Svensson är inte klar. Den läggs
*ut här senare, sannolikt under hösten 2005.)
*
*
*
*****************************************************
*** Step 5e - Vitality(VT):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_vt UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Dimensionen GH består av fyra frågor med
*samma skala. Vi låter därför medianvärdet
*av de fyra frågorna representera denna
*dimension.
*Vi kräver även att minst hälften av frågorna
*i denna dimension skall vara besvarade.

*(Koden för att räkna ut denna dimension
*enligt E. Svensson är inte klar. Den läggs
*ut här senare, sannolikt under hösten 2005.)
*
*
*
*****************************************************
*** Step 5f - Social Functioning(SF):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey

*
*Dimensionen SF består av två frågor med olika
*svarsskalor. Dessa två frågor kan därför inte
*naturligt kan slås samman till en skala.
*Vi sätter svaren på fråga 6 som kolumner och
*svaren på fråga 10 som rader i en tabell. De
*olika rutorna ges en siffra från 1-6 eller
*1-10 (enligt E Svensson). Vi väljer här den
*10-gradiga mer detaljerade skalan där 10 anger
*inga besvär och 1 högsta tänkbara besvär.
*Vi kräver även att båda frågorna
*i denna dimension skall vara besvarade för
*att vi skall räkna fram denna dimension.
*
DEFINE sf36x1_dim_es_sf
*
IF q6z1=1 AND q10z1=1 THEN
ASSIGN sf36x1_dim_es_sf=1
END
IF q6z1>1 OR q10z1>1 THEN
ASSIGN sf36x1_dim_es_sf=2
END
IF q6z1=2 AND q10z1=2 THEN
ASSIGN sf36x1_dim_es_sf=3
END
*
WRITE REPLACE sf36x1_dim_es_sf UniqueKey sf36x1_dim_es_sf
*
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_sf UniqueKey::UniqueKey
*
IF q6z1>2.5 OR q10z1>2.5 THEN
ASSIGN sf36x1_dim_es_sf=4
END
IF q6z1=2 AND q10z1=3 THEN
ASSIGN sf36x1_dim_es_sf=5
END
IF q6z1=3 AND q10z1=2 THEN
ASSIGN sf36x1_dim_es_sf=5
END
*
WRITE REPLACE sf36x1_dim_es_sf UniqueKey sf36x1_dim_es_sf
*
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_sf UniqueKey::UniqueKey
*
IF q6z1=3 AND q10z1=3 THEN
ASSIGN sf36x1_dim_es_sf=6
END
IF q6z1>3.5 OR q10z1>3.5 THEN
ASSIGN sf36x1_dim_es_sf=7
END
IF q6z1=2 AND q10z1>3.5 THEN
ASSIGN sf36x1_dim_es_sf=8
END
*
WRITE REPLACE sf36x1_dim_es_sf UniqueKey sf36x1_dim_es_sf
*
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_sf UniqueKey::UniqueKey
*
IF q6z1>3.5 AND q10z1=2 THEN
ASSIGN sf36x1_dim_es_sf=8
END
IF q6z1=3 AND q10z1>3.5 THEN
ASSIGN sf36x1_dim_es_sf=9
END
IF q6z1>3.5 AND q10z1=3 THEN
ASSIGN sf36x1_dim_es_sf=9
END
*
WRITE REPLACE sf36x1_dim_es_sf UniqueKey sf36x1_dim_es_sf
*
READ sf36
RELATE sf36x1_dim_sf UniqueKey::UniqueKey
RELATE sf36x1_item_6 UniqueKey::UniqueKey
RELATE sf36x1_item_10 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_sf UniqueKey::UniqueKey
*
IF q6z1>3.5 AND q10z1>3.5 THEN
ASSIGN sf36x1_dim_es_sf=10
END
*
*Om inte både fråga 6 och 10 är besvarad
*sätter vi missing data på denna dimension
IF q6z1=0 OR q10z1=0 THEN
ASSIGN sf36x1_dim_es_sf=(.)
END
*
WRITE REPLACE sf36x1_dim_es_sf UniqueKey sf36x1_dim_es_sf
*
*
*
*****************************************************
*** Step 5g - Role Emotional(RE):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_item_5 UniqueKey::UniqueKey
*
*Dimensionen RE består av flera frågor där den
*svarande ombeds bejaka eller förneka närvaron
*av vissa konsekvenser. Frågorna har inte en
*stigande skala av besvär som kan rangordnas.
*Summan av antalet jakande svar blir värdet
*för denna dimensionen. Denna dimension kan
*alltså variera mellan 0-3. Vi kodar så att
*3 är bra (frånvaro av ja-svar).
*Vi kräver även att minst hälften av frågorna
*i denna dimension skall vara besvarade.
Define q5a_es_z1
IF check_re1x1>1 AND q5az1=2 THEN
ASSIGN q5a_es_z1=1
ELSE
ASSIGN q5a_es_z1=(.)
END
IF check_re1x1>1 AND q5az1=1 THEN
ASSIGN q5a_es_z1=0
END
*
Define q5b_es_z1
IF check_re1x1>1 AND q5bz1=2 THEN
ASSIGN q5b_es_z1=1
ELSE
ASSIGN q5b_es_z1=(.)
END
IF check_re1x1>1 AND q5bz1=1 THEN
ASSIGN q5b_es_z1=0
END
*
WRITE REPLACE sf36x1_dim_es_re_temp UniqueKey q5a_es_z1 q5b_es_z1
*
READ sf36
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_item_5 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_re_temp UniqueKey::UniqueKey
*
Define q5c_es_z1
IF check_re1x1>2 AND q5cz1=2 THEN
ASSIGN q5c_es_z1=1
ELSE
ASSIGN q5c_es_z1=(.)
END
IF check_re1x1>1 AND q5cz1=1 THEN
ASSIGN q5c_es_z1=0
END
*
WRITE REPLACE sf36x1_dim_es_re_temp UniqueKey q5a_es_z1 q5b_es_z1 q5c_es_z1
*
READ sf36
RELATE sf36x1_dim_re UniqueKey::UniqueKey
RELATE sf36x1_item_5 UniqueKey::UniqueKey
RELATE sf36x1_dim_es_re_temp UniqueKey::UniqueKey
*
DEFINE sf36x1_dim_es_re
ASSIGN sf36x1_dim_es_re=q5a_es_z1+q5b_es_z1+q5c_es_z1
*
WRITE REPLACE sf36x1_dim_es_re UniqueKey sf36x1_dim_es_re
DELETE TABLES sf36x1_dim_es_re_temp RUNSILENT
*
*
*
*****************************************************
*** Step 5h - Mental Health(MH):
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
READ sf36
RELATE sf36x1_dim_mh UniqueKey::UniqueKey
RELATE sf36x1_item_9 UniqueKey::UniqueKey
*
*Dimensionen MH består av fem frågor med
*samma skala. Vi låter därför medianvärdet
*av de fem frågorna representera denna
*dimension.
*Vi kräver även att minst hälften av frågorna
*i denna dimension skall vara besvarade.

*(Koden för att räkna ut denna dimension
*enligt E. Svensson är inte klar. Den läggs
*ut här senare, sannolikt under hösten 2005.)
*
*
*
*****************************************************
*** Step 5i - Reported health transition:
*** Dimension (delskala) enligt
*** E Svensson Stat Med 2001:20:3831-3846
***
****************************************************
*
*Reported health transition är en fråga som inte
*ingår i någon av de åtta dimensionerna. Denna
*fråga står för sig själv. Eftersom detta är en
*enda fråga behöver den inte kodas om utan kan
*bearbetas statistiskt direkt, givetvis med
*passande icke parametriska statistiska metoder.
*
*
*
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*****************************************************
*
*
*
*****************************************************
*** Steg 6 - Förbereda statistiska analyser
**
****************************************************
*
*Nu gör vi ett READ-kommando och sedan länkar
*vi extratabeller med nya framräknade variabler.
*Vi har nu skapat många nya extratabeller och det
*blir ofta för tungt för datorn att länka alla
*samtidigt. Länka därför bara de du behöver för en
*viss statistisk analys. Därefter gör du ett nytt
*READ-kommando, länkar andra tabeller och gör sedan
*nästa statistiska analys, osv.
*
*Vi läser in rådata
READ sf36
*
*Nedan listas de tabeller med nya framräknade
*variabler som är av intresse
*(Ta bort * framför raden om du vill länka
*en viss tabell)
*
*Alla frågorna omkodade enligt manualen
*RELATE sf36x1_item_1 UniqueKey::UniqueKey
*RELATE sf36x1_item_2 UniqueKey::UniqueKey
*RELATE sf36x1_item_3 UniqueKey::UniqueKey
*RELATE sf36x1_item_4 UniqueKey::UniqueKey
*RELATE sf36x1_item_5 UniqueKey::UniqueKey
*RELATE sf36x1_item_6 UniqueKey::UniqueKey
*RELATE sf36x1_item_7 UniqueKey::UniqueKey
*RELATE sf36x1_item_8 UniqueKey::UniqueKey
*RELATE sf36x1_item_9 UniqueKey::UniqueKey
*RELATE sf36x1_item_10 UniqueKey::UniqueKey
*
*De åtta dimensionerna enligt manualen
*RELATE sf36x1_dim_pf UniqueKey::UniqueKey
*RELATE sf36x1_dim_rp UniqueKey::UniqueKey
*RELATE sf36x1_dim_bp UniqueKey::UniqueKey
*RELATE sf36x1_dim_gh UniqueKey::UniqueKey
*RELATE sf36x1_dim_vt UniqueKey::UniqueKey
*RELATE sf36x1_dim_sf UniqueKey::UniqueKey
*RELATE sf36x1_dim_re UniqueKey::UniqueKey
*RELATE sf36x1_dim_mh UniqueKey::UniqueKey
*
*Summaindex för fysisk och mental hälsa
*enligt manualen
*RELATE sf36x1_summary UniqueKey::UniqueKey
*
*De åtta dimensionerna enl E Svensson
*RELATE sf36x1_dim_es_pf UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_rp UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_bp UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_gh UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_vt UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_sf UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_re UniqueKey::UniqueKey
*RELATE sf36x1_dim_es_mh UniqueKey::UniqueKey
 

Beskrivning av de kommandon som används ovan

ASSIGN Betyder tilldela det som står till vänster om = värdet av det som står till höger om =. Oftast används ganska enkel matematik, sällan mer avancerat än de fyra räknesätten. Det som står till höger om = måste omges med " om det är text. Man kan börja med ASSIGN eller LET eller så skippar man dessa kommandoord. Exempel på ASSIGN-kommandot:
=====================
ASSIGN County = "Yellow Medicine"
=====================
LET Address = StreetNumber & " " &StreetName &" " & AptNumber
=====================
now = systemtime
=====================
duration = uears(01/01/88, dateonset)
=====================
group = 1 (Om grupp är en numerisk variabel )
=====================
group = "1" (Om grupp är en textvariabel)
=====================
DEFINE Betyder skapa en ny variabel. Man kan se en variabel som varande kolumnen i en tabell där raderna (kallas även poster) är varje registrerad individ (om det nu är individer som man registrerar). Nästa steg är att fylla kolumnen med värden som räknas fram ur de kolumner som fanns tidigare. Define följs alltså nästan alltid av kommandot assign eller recode. Direkt när en ny variabel är skapad med define accepterar den att man fyller den med siffror eller text. Om man första gången fyller variabeln med siffror kan den sedan inte ta emot text (och tvärtom). Om man gör fel får man använda kommandot undefine och sedan göra rätt. Den nya variabeln kan göras så att den lagras permanent eller bara tillfälligt. Om man inte gör annat än att skriva define lagras den tillfälligt vilket innebär att när man avslutar programmet Analyze Data eller kör ett nytt read-kommando försvinner variabeln (såvida man inte genom write-kommandot har skrivit den till en annan datatabell). Om man efter define-kommandot lägger till global sparas värdet tills modulen Analyze Data stängs av. Lägger man till permanent sparas informationen (även om datorn stängs av) till man använder kommandot undefine. Exempel på define-kommandot:
=====================
DEFINE change
=====================
DEFINE totalitems GLOBAL
=====================
DEFINE totalitems PERMANENT
=====================
Endast tillfälliga variabler innehåller vanligen data (ett värde) för varje post/rad i tabellen. Variabler som är globala/permanenta kan bara innehålla ett enda värde.
DELETE Delete-kommandot kan ta bort filer eller datatabeller. Om en datatabell har en koppling till en View (för inmatning av data i tabellen) tas View:n bort samtidigt som tabellen. Används exempelvis när man tar bort datatabeller som tillfälligt lagras data under en databearbetning. Exempel:
=====================
DELETE FILE c:\epi_info\projekt_d.mdb'
=====================
DELETE TABLES temp
IF Innebär att en variabel skall fyllas med data beroende på om vissa villkor är uppfyllda. Kommandot kan kombinera flera olika villkor med olika resultat. Man kan i varje villkor använda AND, OR och NOT. Kommandot avslutas med END. Se exemplet med SF-36 för att se exempel på hur koden skrivs. Om man använder flera (>3-4) IF-kommandon behöver man mellanlagra data i en annan tabell innan man fortsätter. Orsaken till att mellanlagring behövs är en begränsning i Epi-Info. Denna begränsning kringgås alltså lätt genom en mellanlagring. Mellanlagringen görs rent praktiskt genom att man skriver data till en ny datatabell. Därefter läser man in tabellen med rådata igen, länkar till den nya datatabellen och fortsätter. Detta medför några extra rader programkod som enkelt kopieras om förfarandet behöver upprepas. Mellanlagring visas i exemplet med SF-36. Några exempel på IF-kommandon:
=====================
IF (age <30) AND (age > 17) THEN
ASSIGN group = "Young Adult"
END
=====================
IF (diarrhea = (+)) OR (vomiting = (+)) OR \
(fever = (+)) THEN
ASSIGN ill = (+)
ELSE
ASSIGN ill = (-)
END
=====================
ASSIGN ill = (-)
IF vomiting = (+) THEN
ASSIGN ill = (+)
END
IF diarrhea = (+) THEN
ASSIGN ill = (+)
END
IF fever = (+) THEN
ASSIGN ill = (+)
END
=====================
De två sista exemplen åstadkommer exakt samma sak, nämligen att klassificera individen som sjuk om endera av symptomen förekommer. Bakåtslash (\) på första raden i andra exemplet anger att det är en lång rad som fortsätter på nästa rad.
READ Läser in de data man vill använda. Oftast lagras alla data till ett projekt i en separat fil. Har man registrerat data i Epi Info ligger de lagrade i en fil med ändelsen .mdb (samma filformat som access). Registrerar man data i andra program har filen en annan ändelse. Excel har .xls. Read-kommandot kan läsa excelfiler förutsatt att de bara innehåller data och att översta raden anger variabelns namn. När man använder read-kommandot försvinner tillfälliga variabler man räknat fram. Det gör oftast inget för de kan snabbt räknas fram igen från grunddata. Exempel på READ-kommandot:
=====================
READ 'c:\epi_info\cts.mdb':viewbasdata
=====================
READ "Excel 8.0" 'c:\epi_info\projekt_a':'visits$'
FILESPEC HDR="YES" END
=====================
READ "dBASE IV" 'c:\epi_info\burkinaFaso.dbf'
=====================
READ "Epi6" 'c:\epi_info\sf36.rec' LINKNAME=sf36
=====================
READ "ODBC" sqldatadsn:bigtable LINKNAME=projekt_b
FILESPEC UID="Username" PWD="Password" END
=====================
Om filnamnet innehåller ett mellanslag måste det omges av '-tecken. Det finns ingen nackdel med att använda '-tecken om mellanslag saknas. Om filen som innehåller rådata inte är i filformatet för Epi2000 eller Microsoft Access måste en länk till rådata skapas. Om man inte anger ett speciellt länknamn skapas en tillfällig länk som kallas lnk# där # är ett löpnummer. Den tillfälliga länken (men inte filen med rådata) raderas när man gör ett nytt READ-kommando. Man kan skapa en permanent länk genom att ange ett LINKNAME. Denna permanenta länk (bara länkinformation, inte alla data) sparas i den senast använda Epi2000-filen. Om man vill kan man skapa en egen Epi2000-fil utan egna data som används för att härbärgera länkinformation till en mängd externa databasfiler. Om man läser in en Excelfil som innehåller flera blad anges namnet på bladet sist följt av $.
RECODE Innebär att en variabel skall fyllas med data från en annan variabel på ett speciellt sätt. Kommandot avslutas med END. Om man använder flera (>3-4) korta RECODE-kommandon (eller ett långt) behöver man mellanlagra data innan man fortsätter. Detta beror på en begränsning i Epi-Info. Denna begränsning kringgås lätt genom en mellanlagring. Mellanlagringen görs rent praktiskt genom att man skriver data till en ny datatabell. Därefter läser man in tabellen med rådata igen, länkar till den nya datatabellen och fortsätter. Detta medför några extra rader programkod som enkelt kopieras om förfarandet behöver upprepas. Man kan inte ha mer än 12 nivåer av värden i ett enskilt recode-kommando. Behövs fler får man köra flera recode-kommandon med mellanlagring. Exempel på ett recode-kommando:
=====================
RECODE age TO agegroup
LOVALUE - 10 = "0-10"
10 - 20 = ">10 - 20"
20 - 30 = ">20 - 30"
30 - 40 = ">30 - 40"
40 - 50 = ">40 - 50"
50 - 60 = ">50 - 60"
60 - 70 = ">60 - 70"
70 - 80 = ">70 - 80"
80 - 90 = ">80 - 90"
90 - 100 = ">90 - 100"
100 - HIVALUE = ">100"
END
RELATE Efter ett read-kommando finns en datatabell i datorns minne. Vill man länka en annan tabell används relate-kommandot. Den nya tabellens variabler kan då bearbetas som om de hade funnits i den första tabellen. Normalt döljs poster som inte representeras i båda tabellerna. Om man lägger till ALL visas alla poster i den första tabellen även om en del av posterna inte är representerade i den andra tabellen. Det vanliga är att man bara länkar tabeller där varje post finns representerad i båda tabellerna. När man anger relate måste man givetvis ange vilket fält som identifierar varje post. Det här fältet bör innehålla ett unikt värde för varje post (rad). Fälten som identifierar posterna kan ha olika namn i de två tabellerna. Dessa fältnamn anges i kommandot separerade av dubbelkolon. Man kan köra flera relate-kommandon efter varandra och på så sätt länka flera tabeller med den som är inläst med senaste read-kommandot. Ju fler tabeller som relateras desto mer ansträngande för datorn. Även om du kan ha oändligt många tabeller avråds från att samtidigt länka fler än 5-10 st (beroende på din dators internminne och processorhastighet). Nästa gång du kär ett read-kommando bryts länkarna. Begränsningen i antalet samtidiga länkade tabeller är sällan ett problem eftersom man efter en eller ett par analyskommandon kan köra ett read-kommando på den första tabellen och sedan länka andra tabeller varvid man gör andra analyser. Exempel på relate-kommandot:
=====================
RELATE sf36x1_dim_pf UniqueKey::UniqueKey
=====================
RELATE viewPatient famidnum :: famidnum
WRITE Detta kommando kopierar (exporterar) alla variabler och deras innehåll till en annan datatabell. Datatabellen kan vara en annan tabell i en Epi-Info fil. Det kan också vara en helt annan filtyp, exempelvis excelfil, dBase, Foxpro, text, etc. Man kan välja om man skall skriva över den andra tabellen om den finns eller om data läggs till som nya poster. Man kan styra om alla tillgängliga variabler skall exporteras (anges med *) eller bara några. Exempel:
=====================
WRITE APPEND "Epi Info" 'd:\epi_info\demo1.mdb':table1 *
=====================
WRITE APPEND "Epi Info" 'd:\epi_info\demo1.mdb':table1 age sex group
=====================
WRITE APPEND "Epi Info" 'd:\epi_info\demo1.mdb':test1 * EXCEPT bohid boh aliennumber
=====================
WRITE REPLACE "Excel 4.0" 'C:\Epi_Info\projekt_a.xls' *
=====================

 


Åter till innehållsförteckningen för Epi-Info


Denna webbsida är författad av
Doc. Ronny Gunnarsson
Distriktsläkare/Familjeläkare

Läs om regler för ansvar och copyright som gäller för denna webbsida.