[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: |
---|
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!