Turbomatchausta

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Reijo Sund
Sähköposti:    reijo.sund'at'stakes.fi
Päiväys: 8.3.2002 19:37

Hei taas!

Isoja aineistoja käsitellessä on tyypillistä, että joitain muuttujia
joudutaan "linkkaamaan" tiedostosta toiseen jonkun sopivan avaimen
mukaisesti. Esimerkkitapauksia ovat mm. tietojen "täydennys" kuntanumeron
tai henkilötunnuksen kautta.

Yleensä kohdetiedostossa on enemmän havaintoja kuin lähdetiedostossa ja
homman saa hoidettua Survossa periaatteessa kätevästi MODE=3 MATCHillä
(FILE COPY:ssa). Valitettavasti käytännössä tiedostojen koon kasvaessa
tämä matchaus tulee toivottoman hitaaksi. Sorttaamalla tiedostot
sopivasti matchaus sujuu "alkupäässä" sutjakasti, mutta etanoituu
silti kiihtyvällä tahdilla loppua kohden.

Ongelman saa kierrettyä jakamalla aineistoja sopivan kokoisiin lohkoihin,
tekemällä matchauksen aina yhdessä lohkossa kerrallaan ja lopuksi sitten
yhdistämällä lohkot takaisin kokonaisuudeksi. Ohessa on sukro, joka
tekee juuri tämän. Viestin lopussa on vielä hiukan vertailua lohkomisen
tuomista eduista.

Säästyneitä työtunteja kaikille! ;)

terv.
Reijo


- - -

*TUTSAVE TMATCH
/ Turbo-match - Reijo Sund 8.3.2002
*{tempo -1}{init}{save spec VARS W5}{save stack}
*{W1=TURBO}{call SUR-SAVE}{del stack}{load stack}
*{line start}{erase}{erase}INIT 1000,100{act}
*/SUR-RESTORE TURBO{R}
*.....................{R}
*FILE SORT {print W2} BY {print W3} TO _TURD0{act}{R}
*FILE SORT {print W1} BY {print W3} TO _TURS0{act}{R}
*VAR OBS=ORDER TO _TURS0{act}{R}
*.....................{R}
*RESULTS=0 VARS={R}
*STAT _TURD0,CUR+1{act}{save spec N W6}{R}{R}
*{W7=1}{W9=1}{W4=W4-1}
+ luuppi:
*{line start}{erase}{erase}INIT 1000,100{act}
*/SUR-RESTORE TURBO{R}
- if W7 > W6 then goto loppu
*{W8=W7+W4}
*IND=ORDER,{print W7},{print W8}{R}
*FILE SORT _TURD0 BY {print W3} TO _TURD{print W9}{act}{R}
*.....................{R}
*VARS={print W3} IND=ORDER,1{R}
*FILE LOAD -_TURD{print W9},CUR+1{act}{R}{next word}{save word W10}
*{R}.....................{R}
*VARS=OBS CASES={print W3},{print W10}{R}
*FILE LOAD -_TURS0,CUR+1{act}{R}{next word}{save word W11}
*{R}{erase}{erase}{pre}1{act}{R}
*.....................{R}
*RESULTS=0 VARS={R}
*STAT _TURD{print W9},CUR+1{act}{save spec N W10}{R}{R}
*.....................{R}
*VARS={print W3} IND=ORDER,{print W10}{R}
*FILE LOAD -_TURD{print W9},CUR+1{act}{R}
*{next word}{save word W10}
*{R}.....................{R}
*VARS=OBS CASES={print W3},{print W10}{R}
*FILE LOAD -_TURS0,CUR+1{act}{R}
*{pre}{d}{pre}{d}{u}
*{next word}{save word W12}
*{R}.....................{R}
*IND=ORDER,{print W11},{print W12}{R}
*FILE SORT _TURS0 BY {print W3} TO _TURS{print W9}{act}{R}
*.....................{R}
*MATCH={print W3} VARS={print W5} MODE=3 ODD=NUL{R}
*FILE COPY _TURS{print W9}  _TURD{print W9}{act}{R}
*{W7=W8+1}{W9=W9+1}{goto luuppi}
+ loppu:
*{line start}{erase}{erase}INIT 1000,100{act}
*/SUR-RESTORE TURBO{R}
*FILE DEL {print W2}{act}{R}
*{W8=1}
+ luuppi2:
*FILE COPY _TURD{print W8} {print W2}{act}{R}
*{W8=W8+1}
- if W8 < W9 then goto luuppi2
/>del _tur*.svo{act}{R}
*{W1=TURBO}{call SUR-RESTORE}
*{tempo +1}
*{end}
*...................................................................
*
*Esimerkkikomento:
*
*VARS=<kopioitavat muuttujat> 
*/TMATCH <mistä>,<mihin>,<match-muuttuja>,<lohkon koko> 
*
*...................................................................
*Testi tilanteelle, jossa
* - mistä-havaintoja 4158
* - mihin-havaintoja 5000
*
*DATA MITTA,A,B,C
CBLOCK AIKA
A 100  100.4
* 300   41.9
* 500   31.4
* 800   28.1
* 900   26.6
*1000   26.9
*1100   27.5
*1500   29.4
*2000   32.0
*3000   38.9
*4000   46.8
B5000   62.0
*
*GPLOT MITTA,BLOCK,AIKA / LINE=1
*
*Kuten nähdään, valitsemalla sopiva lohkon koko, ajan säästö on
*näinkin pienellä aineistolla jo yli 50%.
*
*Toisessa testitilanteessa, jossa mistä-havaintoja oli 35309 ja
*mihin-havaintoja 42180, aikaa kului sopivalla lohkon koolla (900)
*alle 3.5 minuuttia, kun taas ilman paloittelua aikaa meni
*"tuntikaupalla".

Vastaukset:
[ei vastauksia]

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.