Mārtiņš Liberts ([info]djhurio) rakstīja,
@ 2004-02-04 20:22:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Mūzika:Metallica - The Small Hours

SPSS task
Vakar dabūju interesantu uzdevumu realizācijai ar SPSS.

Doti divi faili. Vienā ir definēti intervāli, kuri nepārklājas un seko viens otram. Galapunkti ir veseli skaitļi. Katra nākamā intervāla sākumpunkts ir iepriekšējā intervāla galapunkts + 1.

cum_scum
15
623
2443
4474
7587


Otrajā failā ir vienkārši skaitļi.

summa
12
54


Uzdevums ir atrast intervālus, kuri ietver kādu no 2. faila skaitļiem. Intervālu skaits ir lielāks par skaitļu skaitu 2. failā. Katram skaitlim atbilst tikai viens intervāls.

Mans atrisinājums bija ar diviem macrosiem un diezgan pagarš:

data list list
/summa.
begin data.
12
54
end data.

comp max=$casenum.
sort cases by max (d).
comp max=max+$casenum-1.
sort cases by summa.

do if $casenum=1.
write out="C:\My Documents\Darbs\DSP\serp\def.sps"
/"set err=off."
/"define !sum()"
/" "summa.
else if $casenum<>max.
write out="C:\My Documents\Darbs\DSP\serp\def.sps"
/" "summa.
else.
write out="C:\My Documents\Darbs\DSP\serp\def.sps"
/" "summa
/" !enddefine."
/"set err=on.".
end if.

exe.

incl file="C:\My Documents\Darbs\DSP\serp\def.sps".

data list list
/cum_s cum.
begin data.
1 5
6 23
24 43
44 74
75 87
end data.

set err=off.
define !serp()
!do !var !in (!eval(!sum))
if !var>=cum_s and !var<=cum izl=1.
!doend
!enddefine.
set err=on.

!serp.

exe.


Aizsūtīju arī šo uzdevumu uz SPSSX-L listi. Vislābāko atrisinājumu atsūtīja Raynalds. Viņš to paveica bez macrosiem. Es to druksu modificēju:

data list list
/summa.
begin data.
12
54
end data.

save out="C:\My Documents\Darbs\DSP\serp\file2.sav".

data list list
/cum_s cum.
begin data.
1 5
6 23
24 43
44 74
75 87
end data.

add files
/file=*
/file="C:\My Documents\Darbs\DSP\serp\file2.sav"
/in=in2
/rename summa=cum.

sort cases by cum.

comp izl=lag(in2).
exe.

sel if in2=0.
if sysmis(izl) izl=0.

add files
/file=*
/drop=in2.
exe.


Daile ;)


(Ierakstīt jaunu komentāru)

Neesi iežurnalējies. Iežurnalēties?