[vastaus aiempaan viestiin]
Kirjoittaja: | Petri Palmu |
---|---|
Sähköposti: | - |
Päiväys: | 31.12.2007 14:25 |
*Moi, * *Lisäsin luupituksiin tarkoitettuun sukroon ominaisuuden, *joka mahdollistaa indeksointimuuttujan arvojen *kaivamisen datasta. Ohessa pieni esimerkki asiasta. *Hyvää uutta vuotta! t. Petri * *ESIM: Indikaattorimuuttujien luominen aineistoon * *DATA _XDAT *G *1 *1 *1 *1 *2 *2 *2 *2 *4 *4 *4 *4 * * *FILE COPY _XDAT TO NEW XDAT *..................... *FILE EXPAND XDAT,10,30 * *FILE SHOW XDAT *......................... * */REP a,CUR+1,b / DATA=XDAT GROUPVAR=G FORI=$i LEVEL=1 * *....................... aVAR I$i:1=if(G=$i)then(1)else(0) TO XDAT b * *............................... * *FILE LOAD XDAT *DATA XDAT*,A,B,C C G I1 I2 I4 A 1 1 0 0 * 1 1 0 0 * 1 1 0 0 * 1 1 0 0 * 2 0 1 0 * 2 0 1 0 * 2 0 1 0 * 2 0 1 0 * 4 0 0 1 * 4 0 0 1 * 4 0 0 1 B 4 0 0 1 * * Sukro: *TUTSAVE REP / REPeat / 2007-12-09 / PP / / Vastaa for($i in 1:n) {...} luuppirakennetta / / /REP sukrossa annetaan parametrit: / argumentit: / <luupissa aktivoitava merkki kontrollisarakessa>, / <aloitusrivi>, (tämä on oikeastaan tarpeeton) / <merkki kontrollisarakessa, johon aktivointi päättyy> / täsmennykset: / NREP = <toistojen lkm> / FORI = luuppi-indeksointimuuttujan nimi luuppikaaviossa ($i, $j,...) / (huom. nimi oltava sellainen, ettei se esiinny toimituskentässä / edes osana muita merkkijonoja) / LEVEL = <1,2,..> (oletus = 1) / NREP={1,2,... } tai / DATA=<data> GROUPVAR=<Grouping variable> / NSTART= / Sitten varsinaisen suoritusosan sisällä voi käyttää / (luupin mahdollinen lopetus) / BREAK = {tyhjä,1} / (luuppi-indeksimuuttujan arvon muuttaminen) / INCR = {kokonaisluku tai tyhjä} / / ********************************************************* / / def Wact=W1 Wcur1=W2 Wend=W3 Wapu=W9 / def Wact=W10 Wnrep=W11 Wr1=W12 Wc1=W13 Wfori=W14 Wlevel=W15 / def Wi=W20 Wc=W21 Wbreak=W22 Wincr=W23 Wnstart=W24 / def Wdata=W25 Wgrpvar=W26 Wchar=W27 / def Wrcmd=W30 Wccmd=W31 Wrtxtc=W32 Wctxtc=W33 / / ********************************************************* *{init}{tempo -1} / Täsmennykset *{save spec DATA Wdata} *{save spec GROUPVAR Wgrpvar} *{save spec NREP Wnrep} *{save spec NSTART Wnstart} *{save spec LEVEL Wlevel} *{save spec FORI Wfori} / - if Wdata '<>' {} then goto MakeGrpInd else goto Checks1 / ---- indexing from data -------- + MakeGrpInd: - if GROUPVAR '=' {} then goto ERR1 / Do index variable *{save stack SUR_TMP} *{save stack}{W1=NGRP}{call SUR-SAVE}{del stack}{load stack SUR_TMP} * *{jump 1,1,1,1}SCRATCH {act}{line start} *{form}/N_GRP RETURN / to current application *{R} / *** DATA (AND VAR CHECKS) **** / the data: *CHECK {print Wdata}.SVO{act}{r}{save char Wapu} - if Wapu '<>' O then goto ERR2 *{R}{R}{R}{R}{R} / *..................{R} *{R} *FILE SORT {print Wdata} BY {print Wgrpvar} TO _TMP1{act}{R} *FILE DEL _GRPTMP2{act}{R} *FILE AGGR _TMP1 BY {print Wgrpvar} TO _GRPTMP2{R} *VARIABLES:{R} *{print Wgrpvar} FIRST {print Wgrpvar}{R} *END{u3}{act}{d3}{R} *...............{R} *IND={print Wgrpvar},!MISSING{R} *STAT _GRPTMP2,CUR+1 / VARS={print Wgrpvar}{act} *{save spec N Wnrep}{save stack SUR_TMP} / *{W1=NGRP}{call SUR-RESTORE} *{load stack SUR_TMP} /{goto ERR1} / ----- End indexing from data ------------ + Checks1: / - if Wnstart '<>' {} then goto nStartGiven *{Wnstart=1} + nStartGiven: - if Wlevel '=' {} then goto Level else goto LevelOk + Level: {Wlevel=1} + LevelOk: / mahdollisia täsmennyksiä joilla luuppaamista voidaan ohjata / esim hypätään silmukasta ulos kesken (esim. konvergenssikrit täyt) *{Wincr=0} *{Wbreak=} /{R}{print Wlevel}{goto End} / Talletetaan sukrokomennon paikka toimkentässä *{save cursor Wrcmd,Wccmd} / + Edit1: *{jump cur+1,cur+1,1}{u5}{d5} *{save cursor Wr1,Wc1}{u}{ins line}{ins line}{ins line} *{ins line}{ins line}{ins line}{ins line}{u4} / Mahdollista luuppausindeksimuuttujaa varten + ReplFormat: *SAVEP CUR+5,{print Wend},_tmploop{print Wact}{act} *{line start}{erase} *LOADP _tmploop{print Wact}2,CUR+5{R} / *TXTCONV _tmploop{print Wact},_tmploop{print Wact}2{R} *CONVERSIONS:{R} *T "{print Wfori}" "{save cursor Wrtxtc,Wctxtc}{R} *END / / Then Activate all the commands with specified control char ACT / and repeat it nrep times / *{jump Wr1,Wr1,1}{u5}{d5} *{Wi=Wnstart}{Wi=Wi-1} / Luuppi alkaa + Loop: {Wi=Wi+1}{Wi=Wi+Wincr} - if Wi > Wnrep then goto E / Korvataan luuppi-indeksimuuttuja asianmukaisella arvolla 1,2,.. + Txtconv: {jump Wrtxtc,Wrtxtc,Wctxtc} / Haaraudutaan sen mukaan onko indeksimuuttuja datasta vai ei - if Wdata '<>' {} then goto IndFromDat else goto IndFromCmd / CASE 1: + IndFromDat: *{u5}{line start}{erase} *FILE LOAD -_GRPTMP2,CUR+1 / VARS={print Wgrpvar} IND=ORDER,{print Wi} *{line start}{act} *{R}{next word}{save word Wchar} / To TXTCONV ... *{jump Wrtxtc,Wrtxtc,Wctxtc}{erase}{print Wchar}" *{goto ActTxtConv} / / CASE 2: If index given in command line spec + IndFromCmd: *{jump Wrtxtc,Wrtxtc,Wctxtc}{erase}{print Wi}" + ActTxtConv: *{u2}{line start}{act}{u}{act}{d5} / Etsitään kontrollisarakkeesta merkkiä + Activate: {} *{pre}Lc *{line start}{l4}{save char Wc}{r} *{save spec BREAK Wbreak} - if Wbreak '<>' {} then goto E + CtrlCheck: - if Wc '=' Wend then goto Loop - if Wc '=' Wact then goto Act else goto NewRow + Act: / Siirretäänkö luuppi-indeksiä johonkin? *{save spec INCR Wincr} - if Wincr '=' {} then goto Move0 else goto Switch + Move0: {Wincr=0} + Switch: / Talleta sukromuisti tiedostoksi luupin tason mukaan - switch Wlevel - case 1: goto R1 - case 2: goto R2 - case 3: goto R3 - case 4: goto R4 - case 5: goto R5 - case 6: goto R6 - case 7: goto R7 - case 8: goto R8 - default: goto E / + R1: {save stack SUR_REP1}{act}{load stack SUR_REP1}{R}{goto Activate} + R2: {save stack SUR_REP2}{act}{load stack SUR_REP2}{R}{goto Activate} + R3: {save stack SUR_REP3}{act}{load stack SUR_REP3}{R}{goto Activate} + R4: {save stack SUR_REP4}{act}{load stack SUR_REP4}{R}{goto Activate} + R5: {save stack SUR_REP5}{act}{load stack SUR_REP5}{R}{goto Activate} + R6: {save stack SUR_REP6}{act}{load stack SUR_REP6}{R}{goto Activate} + R7: {save stack SUR_REP7}{act}{load stack SUR_REP7}{R}{goto Activate} + R8: {save stack SUR_REP8}{act}{load stack SUR_REP8}{R}{goto Activate} / Ja jollei aktivoida niin uusi rivi ja paluu Activateen + NewRow: {R}{goto Activate} / Viimeistelyt + E: {jump Wrcmd,Wrcmd,Wccmd}{d2} *{del line}{del line}{del line}{del line}{del line}{del line} *{u}{line start}{erase} *LOADP _tmploop{print Wact},CUR+1{act}{del line} *{jump Wrcmd,Wrcmd,Wccmd}{u2}{d2}{goto End} + ERR1: {goto End} + ERR2: {message} Data file not found!@{goto End} + End: {end} * *.........................
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!