Lag/change point datan tekeminen FILE COPY + MATCH (SQL JOIN)

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

Lag/change point datan tekeminen FILE COPY + MATCH (SQL JOIN)

Petri Palmu

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.

Reply | Threaded
Open this post in threaded view
|

Re: Lag/change point datan tekeminen FILE COPY + MATCH (SQL JOIN)

markku.verkasalo
Hauskaa, että jaoit tämän idean muillekin.
Selkeä ja survomainen ratkaisu ongelmaan.