Manual för Epi-Info: Ex på analysprogram - Skapa rangvariabler
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 använt vid en studie där man ville titta på hur mycket smärta, domningar och stickningar som upplevs från händerna hos gravida kvinnor med carpaltunnelsyndrom (inklämning av en nerv i handleden). En målsättning är att se om faktorer som exempelvis kvinnans ålder, graviditetslängd och antal tidigare graviditeter har samband med storleken på besvären. Symptomen smärta, stickningar respektive domningar mäts med visuell analog skala (VAS). Eftersom VAS är en variabel som mäts med ordinalskala måste man omvandla det direkta VAS-värdet till en rangvariabel innan man kan göra exempelvis en regressionsanalys.  Här visas ett exempel på hur man skapar tre nya rangvariabeler av tre befintliga variabler. 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. Efter ett tag ser man att det egentligen inte är så svårt. Nedanför programscriptet kommer några förklaringar till varje enskilt kommando.

*Skapa råmaterial till rangvariabel smärta (a) enl VAS
*ursprungsvariabeln heter m02a1
*den nya rangvariabeln kallas längre ner för rm02a1
READ 'C:\Epi_Info\cts.MDB':viewbasdata
*Först gör vi en frekvenstabell som läggs som en
*tillfällig separat tabell som vi kallar Vasa1.
*Nedan kan du se hur tabellen Vasa1 ser ut.
FREQ m02a1 OUTTABLE=Vasa1
*Vi läser nu in den nya tabellen i minnet
READ Vasa1
*Skapar en kopia av Vasa1
WRITE Vasa2 *
*Relaterar Vasa1 med Vasa2.
RELATE Vasa2 Varname::Varname
*Relateringen skapar nu av 20 poster i vardera tabellen
*en struktur med 20*20 rader, dvs 400 poster.
*Eftersom det nu finns två m02a1 lägger Epi-Info
*automatiskt till en 1:a till den ena av dem.
*Vi väljer nu ut de poster där svaret på m02a1
*inte överstiger svaret på m02a11
SELECT m02a1<=m02a11
*Råmaterialet till den nya rangvariabeln lagras i en
*egen tabell som vi här väljer att kalla Vasa3
FREQ m02a1 OUTTABLE=Vasa3
*Nedan kan du se hur tabellen Vasa3 ser ut.
*
*
*Vi Skapar nu på samma sätt råmaterial till rangvariabel
*dommningar (b) enl VAS ursprungsvariabeln heter m02b1
*den nya rangvariabeln kallas längre ner för rm02b1
*Råmaterialet till den nya rangvariabeln lagras i en
*egen tabell som vi här väljer att kalla Vasb3
READ 'C:\Epi_Info\cts.MDB':viewbasdata
*Efter det senaste read-kommandot behövs inte längre
*tabellerna Vasa1 och Vasa2 så vi tar bort dem
DELETE TABLES Vasa1 RUNSILENT
DELETE TABLES Vasa2 RUNSILENT
FREQ m02b1 OUTTABLE=Vasb1
READ Vasb1
WRITE Vasb2 *
RELATE Vasb2 Varname::Varname
SELECT m02b1<=m02b11
FREQ m02b1 OUTTABLE=Vasb3
*
*Vi Skapar nu på samma sätt råmaterial till rangvariabel
*stickningar (c) enl VAS ursprungsvariabeln heter m02c1
*den nya rangvariabeln kallas längre ner för rm02c1
*Råmaterialet till den nya rangvariabeln lagras i en
*egen tabell som vi här väljer att kalla Vasc3
READ 'C:\Epi_Info\cts.MDB':viewbasdata
*Efter det senaste read-kommandot behövs inte längre
*tabellerna Vasb1 och Vasb2 så vi tar bort dem
DELETE TABLES Vasb1 RUNSILENT
DELETE TABLES Vasb2 RUNSILENT
FREQ m02c1 OUTTABLE=Vasc1
READ Vasc1
WRITE Vasc2 *
RELATE Vasc2 Varname::Varname
SELECT m02c1<=m02c11
FREQ m02c1 OUTTABLE=Vasc3
*
*
*När vi är klara (dvs när vi inte längre behöver
*göra ytterligare ett read-kommando) syr vi ihop
*det hela. Vi börjar med ett sista read-kommando,
*lite kompletterande rensning av tabeller och
*därefter skapar vi rangvariablerna.
READ 'C:\Epi_Info\cts.MDB':viewbasdata
*Efter det senaste read-kommandot behövs inte längre
*tabellerna Vasc1 och Vasc2 så vi tar bort dem
DELETE TABLES Vasc1 RUNSILENT
DELETE TABLES Vasc2 RUNSILENT
*
*Vi kopplar våra originaldata till rangen av dem
RELATE Vasa3 m02a1::m02a1
*Vi skapar en ny variabel som skall bli rangvariabeln
DEFINE rm02a1
*rangvariabeln blir count i tabellen Vasa3
rm02a1=count
*
RELATE Vasb3 m02b1::m02b1
DEFINE rm02b1
*Varje gång vi användet count lägger Epi-Info till
*en siffra till count
rm02b1=count1
*
RELATE Vasc3 m02c1::m02c1
DEFINE rm02c1
rm02c1=count2
*
*
*Det kan vara bra att notera att högt värde på ursprungs-
*variabeln ger lågt värde på motsvarande rangvariabel
*och tvärtom. Högsta värdet på m02a1 ger värdet 1 i
*rm02a2. Lägsta värdet på m02a1 ger högsta värdet på rm02a1.
 

Tabell Vasa1 Tabell Vasa2 Tabell Vasa3
M02a1 VARNAME COUNT
0 M02a1 47
2 M02a1 1
6 M02a1 1
10 M02a1 3
16 M02a1 1
18 M02a1 1
19 M02a1 1
21 M02a1 1
28 M02a1 1
29 M02a1 1
30 M02a1 3
35 M02a1 3
40 M02a1 1
45 M02a1 1
50 M02a1 3
56 M02a1 1
66 M02a1 1
70 M02a1 1
75 M02a1 1
78 M02a1 1
M02a1 VARNAME COUNT
0 M02a1 47
2 M02a1 1
6 M02a1 1
10 M02a1 3
16 M02a1 1
18 M02a1 1
19 M02a1 1
21 M02a1 1
28 M02a1 1
29 M02a1 1
30 M02a1 3
35 M02a1 3
40 M02a1 1
45 M02a1 1
50 M02a1 3
56 M02a1 1
66 M02a1 1
70 M02a1 1
75 M02a1 1
78 M02a1 1
M02a1 VARNAME COUNT
0 M02a1 20
2 M02a1 19
6 M02a1 18
10 M02a1 17
16 M02a1 16
18 M02a1 15
19 M02a1 14
21 M02a1 13
28 M02a1 12
29 M02a1 11
30 M02a1 10
35 M02a1 9
40 M02a1 8
45 M02a1 7
50 M02a1 6
56 M02a1 5
66 M02a1 4
70 M02a1 3
75 M02a1 2
78 M02a1 1

Här visas samma programscript igen men med alla kommentarer borttagna:

READ 'C:\Epi_Info\cts.MDB':viewbasdata
FREQ m02a1 OUTTABLE=Vasa1
READ Vasa1
WRITE Vasa2 *
RELATE Vasa2 Varname::Varname
SELECT m02a1<=m02a11
FREQ m02a1 OUTTABLE=Vasa3
READ 'C:\Epi_Info\cts.MDB':viewbasdata
DELETE TABLES Vasa1 RUNSILENT
DELETE TABLES Vasa2 RUNSILENT
FREQ m02b1 OUTTABLE=Vasb1
READ Vasb1
WRITE Vasb2 *
RELATE Vasb2 Varname::Varname
SELECT m02b1<=m02b11
FREQ m02b1 OUTTABLE=Vasb3
READ 'C:\Epi_Info\cts.MDB':viewbasdata
DELETE TABLES Vasb1 RUNSILENT
DELETE TABLES Vasb2 RUNSILENT
FREQ m02c1 OUTTABLE=Vasc1
READ Vasc1
WRITE Vasc2 *
RELATE Vasc2 Varname::Varname
SELECT m02c1<=m02c11
FREQ m02c1 OUTTABLE=Vasc3
READ 'C:\Epi_Info\cts.MDB':viewbasdata
DELETE TABLES Vasc1 RUNSILENT
DELETE TABLES Vasc2 RUNSILENT
RELATE Vasa3 m02a1::m02a1
DEFINE rm02a1
rm02a1=count
RELATE Vasb3 m02b1::m02b1
DEFINE rm02b1
rm02b1=count1
RELATE Vasc3 m02c1::m02c1
DEFINE rm02c1
rm02c1=count2
 

Beskrivning av de kommandon som används ovan

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
FREQ Används för att ta presentera procentuella fördelningar. Efter kommandot freq kommer den variabel man vill ha fördelningen för. Om variabeln är binär ges även konfidensintervall. Exempel:
=====================
FREQ ill
=====================
FREQ blodgroup
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 $.
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
SELECT Select medför att endast de poster som uppfyller urvalskriterierna används i all fortsatt databearbetning. Ges flera select-kommandon i följd adderas de. Det innebär att de två raderna
SELECT AGE > 35
SELECT SEX = "f"
får samma resultat som en enda rad med kommandot
SELECT (AGE>35) AND (SEX = "f")
För att ta bort urvalsbegräsningen kör man kommandot select utan något efter ordet select. Fler exempel:
=====================
SELECT ((age > 35) and (sex="f")) or ((age > 40) and (sex="m"))
Observera hur man kan använda paranteser i selectuttryck
=====================
SELECT NAME = “mac”
Bara de med det exakta namnet mac (eller MAC) väljs ut.
=====================
SELECT NAME LIKE ”mac*”
De vars namn börjar med mac väljs ut (MacDonald, MacIntosh, etc)
=====================
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.