Viivästetyn / muutospistedatan
rakentaminen FILE COPY + MATCH
Pitkittäis-/paneelidata (ID,T)
Idea: vars. datasta K luodaan
lägätty data K_1, jotka datat yhdistetään siten,
että aikamuuttujaa T lägätään (tai
oikeammin liidataan). Läggäystä ei siis
suoranaisesti tehdä vars. muuttujille X,Y,G,...
Tarkoitus: Käyttää ideaa SQL:ssä.
DATA _K
ID T X Y G
A 1 0 1000 fi
A 2 1 12000 fi
B 2 1 3333 se
C 1 0 650 uk
C 2 1 400 uk
C 3 1 5000 fi
C 4 1 2999 fi
jossa ID = yksilötunniste, T = aika ja
X = 1/0-tilamuuttuja
Y = numeerinen muuttuja
G = kategorinen muuttuja
/ACTIVATE2 +
FILE COPY _K TO NEW K
..................
FILE SHOW K
Tehdään ns. viivästetty data
FILE COPY K TO NEW K_1
....................
VAR T_1:2=T+1 TO K_1 / Talletetaan
VAR TAPU:2=T TO K_1
VAR TAPU:2=T+1 TO K
...........
FILE LOAD +K_1
I T X Y G T_1 TAPU
A 1 0 1000 fi 2 1
A 2 1 12000 fi 3 2
B 2 1 3333 se 3 2
C 1 0 650 uk 2 1
C 2 1 400 uk 3 2
C 3 1 5000 fi 4 3
C 4 1 2999 fi 5 4
FILE LOAD +K
I T X Y G TAPU
A 1 0 1000 fi 2
A 2 1 12000 fi 3
B 2 1 3333 se 3
C 1 0 650 uk 2
C 2 1 400 uk 3
C 3 1 5000 fi 4
C 4 1 2999 fi 5
...........................
Datojen K ja K_1 yhdistelyä varten
luodaan: (tähän voisi tehdä sukron...)
VAR X_1:1=X TO K
VAR X_1:1=MISSING TO K_1
VAR Y_1=Y TO K
VAR Y_1=MISSING TO K_1
VAR G_1:S2=MISSING TO K
VAR str(G_1)=str(G) TO K
VAR G_1:S2=MISSING TO K_1
......................
Täsmäytetään ID ja aika-apumuuttujan TAPU avulla:
FILE COPY K TO K_1 / MODE=3 MATCH=ID,TAPU VARS=X_1,Y_1,G_1
...............
FILE EXPAND K_1,20,100
.............
Muutos X:ssä
VAR dX:1=if(X_1=MISSING)then(MISSING)else(A1) TO K_1
A1=if(X<>X_1)then(1)else(0)
...............
Yhdistetty data, jossa on X,Y viivästetyt muuttujat
X_1,Y_1,G_1
FILE LOAD +K_1 / VARS=ALL,-TAPU,-T_1
I T X Y G X_1 Y_1 G_ dX
A 1 0 1000 fi - - - -
A 2 1 12000 fi 0 1000.000 fi 1
B 2 1 3333 se - - - -
C 1 0 650 uk - - - -
C 2 1 400 uk 0 650.000 uk 1
C 3 1 5000 fi 1 400.000 uk 0
C 4 1 2999 fi 1 5000.000 fi 0
- dX kertoo kohdan, jossa X:n tila muuttuu
(data on vasemmalta sensuroitua)
- Yo. ideaa voi käyttää SQL-kielessä
LEFT JOIN tyyppisesti
- Läggäyksiä voi tehdä esim. YYYY-MM tyyppiselle
aikadatalle (joita mulla on käytössä)
Testasin isommalla rekisteriaineistolla suurelle määrälle
muuttujia ja homma toimi hyvin. SQL JOIN on aika nopea.
SQL:ssä kai myös pystyy luuppaamaan (rivisuunnassa), mutta
yo. tapa on aika kätevä ja esim. R+SQLite pystyy
koodaamaan kuvion niin, ettei tarvitse tehdä
paljoa käsityötä (nimetä ja alustaa muuttujia,
hyödyntää R:n paste(), jolla kirjoittaa
SQL-lauseita).
Jos haluaa jotain kumulatiivisia mittareita, niin
tuohon en heti keksinyt tapaa (Survossa siis X+X[-1] tyyppisesti).
SQL:n aggregointitoiminnoilla kenties?).
Hätätapauksessa voi tehdä luupituksia, mutta esim. R:n for-luuppi
on hiiiiidas.