FILE AGGR - COPY + MATCH

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Petri Palmu
Sähköposti:    -
Päiväys: 7.12.2007 17:02

Moi,

Minulla oli taannoin kahden datan yhdistelyongelma, jossa
päädata (paneeliaineisto) oli muotoa:

DATA _MAIN
ID T   X   Y V
1  1  -   -  1
1  2  -   -  1
2  1  -   -  1
2  2  -   -  1
2  3  -   -  1
3  2  -   -  1
3  3  -   -  1

Toisaalta päädataan haluttiin viedä toisesta järjestelmästä
olevia yksilöaikatietoja (ID , T), joka oli muotoa:

DATA _K1
ID  T  X  Y  Z
1   1  1  -  S
1   2  2  1  U
1   3  4  2  R
2   1  3  -  V
2   2  4  3  O
3   1  2  2  *
3   2  4  1  M
3   3  6  2  M

Päädatassa ei ole kaikkia _K1 datan
mittauksia ja toisaalta _K1 datasta puuttuu ID = 2 yksi havainto (T=3).

Kun yritin käyttää FILE COPY + MATCH toimintoa tähän yhdistelyyn, niin
se oli tavattoman hidas ja valitti koko ajan riveistä joille ei ollut
vastinetta _K1 ja MAIN välillä. Voinee olla, että MATCH +
MODE=2 olisi käyttökelpoinen tässä tilanteessa.

Lähdin kuitenkin ratkaisemaan kivuliasta ongelmaani vähän eri suunnasta,
missä FILE AGGR on keskeisessä roolissa.

...................

Viedään tiedostoksi
FILE COPY _MAIN TO NEW MAIN
FILE COPY _K1 TO NEW K1

Tehdään avain (hyödynnän erästä Survo+R sukroani )
Toki tämän voi tehdä Survon VAR operaatiolla
/R_VAR IDT=paste(MAIN$ID, MAIN$T, sep="-") TO MAIN
/R_VAR IDT=paste(K1$ID, K1$T, sep="-") TO K1

Alustetaan Z muuttuja
VAR Z:S1=MISSING TO MAIN

.....................................
FILE LOAD MAIN
DATA MAIN*,A,B,C
 ID T X Y IDT
  1 1 - - 1-1
  1 2 - - 1-2
  2 1 - - 2-1
  2 2 - - 2-2
  2 3 - - 2-3
  3 2 - - 3-2
  3 3 - - 3-3


.............
FILE SHOW K1
FILE SORT MAIN BY IDT TO MAIN2 / päädatasta kopio
FILE SORT MAIN BY IDT TO TMP1 /
FILE SORT K1 BY IDT TO TMP2

Apumuuttuja aggregointia varten
VAR APU:1=0 TO TMP1 /
VAR APU:1=1 TO TMP2

...............
FILE COPY TMP2 TO TMP1 / pinotaan datat
..............

FILE LOAD TMP1
DATA TMP1*,H,I,J
 ID T X Y V IDT Z APU
  1 1 - - 1 1-1 -   0
  1 2 - - 1 1-2 -   0
  2 1 - - 1 2-1 -   0
  2 2 - - 1 2-2 -   0
  2 3 - - 1 2-3 -   0
  3 2 - - 1 3-2 -   0
  3 3 - - 1 3-3 -   0
  1 1 1 - - 1-1 S   1
  1 2 2 1 - 1-2 U   1
  1 3 4 2 - 1-3 R   1
  2 1 3 - - 2-1 V   1
  2 2 4 3 - 2-2 O   1
  3 1 2 2 - 3-1 *   1
  3 2 4 1 - 3-2 M   1
  3 3 6 2 - 3-3 M   1


............................
Sitten aggregointi...

FILE SORT TMP1 BY IDT,APU TO TEMP1
FILE DEL TEMP2
FILE AGGR TEMP1 BY IDT TO TEMP2
VARIABLES:
ID FIRST  ID
T  FIRST  ID
IDT FIRST  IDT
X   LAST  X
Y   LAST  Y
Z   LAST  Z
APU MIN APU
END

FILE LOAD TEMP2
DATA TEMP2*,K,L,M
  ID   T IDT   X   Y Z APU
   1   1 1-1   1   - S   0
   1   1 1-2   2   1 U   0
   1   1 1-3   4   2 R   1
   2   2 2-1   3   - V   0
   2   2 2-2   4   3 O   0
   2   2 2-3   -   - -   0
   3   3 3-1   2   2 *   1
   3   3 3-2   4   1 M   0
   3   3 3-3   6   2 M   0

X,Y,Z arvot "aggregoitiin" sopivasti LASTin avulla.
APU = 1 arvolla varustettu rivit eivät kuulu päädataan, joten
niistä pitää vielä päästä eroon...

.......................
Otetaan vain ne rivit, jotka esintyvät päädatassa:
FILE COPY TEMP2 TO NEW TEMP3 / IND=APU,0

FILE SHOW TEMP3
.............
Viedään alkuperäiseen MAIN(2) aineistoon
Nyt ei tarvita täsmäys-muuttujaa IDT mutta lajittelujärjestys
on oltava oikea.

VARS=X,Y,Z
FILE COPY TEMP3 TO MAIN2 / MATCH=#
MODE=1
.........................
Lopputulos (vertaa _MAIN ja _K1 datojen kanssa)

FILE LOAD MAIN2
DATA MAIN2*,N,O,P
 ID T X Y V IDT Z
  1 1 1 - 1 1-1 S
  1 2 2 1 1 1-2 U
  2 1 3 - 1 2-1 V
  2 2 4 3 1 2-2 O
  2 3 - - 1 2-3 -
  3 2 4 1 1 3-2 M
  3 3 6 2 1 3-3 M


Massiivisilla aineistoilla - paljon yksilö-aikahavaintoja -
tällä tavalla useiden tuntien mätsäys näyttäisi kutistuvan muutamaan
hassuun minuuttiin. Onkohan joku muu käyttänyt aiemmin
samaa kikkaa? Vai löytyykö vielä parempi tapa?


t. Petri

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.