Использование STRING
манипуляций (после преобразование поля NUMERIC
в STRING
, если необходимо), в частности SUBSTR
вы можете извлекать пары цифр по своему усмотрению.
/* Simulate data */.
data list list / x (f8.0).
begin data.
102102
23453212
142378
2367890654
2345
45
end data.
dataset name dsSim.
Если у вас есть известное максимальное значение, в вашем примере значение длиной 10 цифр, вам потребуется 5 переменных для хранения пар цифр, что делает следующее:
preserve.
set mxwarns 0 /* temporarily supress warning messages */ .
string #xstr (a10).
compute #xstr=ltrim(string(x,f18.0)).
compute A_1=number(substr(#xstr,1,2), f8.0).
compute A_2=number(substr(#xstr,3,2), f8.0).
compute A_3=number(substr(#xstr,5,2), f8.0).
compute A_4=number(substr(#xstr,7,2), f8.0).
compute A_5=number(substr(#xstr,9,2), f8.0).
exe.
restore.
Однако вы можете предпочесть кодировать что-то подобное более динамично (с использованием python), где сам код будет считывать максимальное значение в данных и создавать столько переменных, сколько необходимо.
begin program.
import spssdata, math
spss.Submit("set mprint on.")
# get maximum value
spss.Submit("""
dataset declare dsAgg.
aggregate outfile=dsAgg /MaxX=max(x).
dataset activate dsAgg.
""")
maxvalue = spssdata.Spssdata().fetchone()[0]
ndigits=math.floor(math.log(maxvalue,10))+1
cmd="""
dataset close dsAgg.
dataset activate dsSim.
preserve.
set mxwarns 0.
string #xstr (a10).
compute #xstr=ltrim(string(x,f18.0)).
"""
for i in range(1,int(math.ceil(ndigits/2))+1):
j=(i-1)*2+1
cmd+="\ncompute B_%(i)s=number(substr(#xstr,%(j)s,2), f8.0)." % locals()
cmd+="\nexe.\nrestore."
spss.Submit(cmd)
spss.Submit("set mprint off.")
end program.
Вам нужно будет взвесить все за и против каждого метода, чтобы оценить, какой из них подходит вам лучше всего, как вы ожидаете, что ваши данные поступят, и как вы затем приступите к работе позже. Я не пытался обернуть ни один из них в макрос, но это можно было бы сделать так же легко.
person
Jignesh Sutar
schedule
01.03.2015