Re: Indeksointimuuttuja datasta...

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