问题描述
我有一个包含变量信息的 excel 文件 (excel1),另一个包含有关列表的信息 (excel2)。
为了创建一个语法来生成新的语法来创建 VARIABLE 和 VALUES LABELS,我使用了@eli.k here 提出的解决方案。 但是使用这个解决方案,我必须有一个包含列表的数据集,这样我就可以使用它而不是“手工”(复制/粘贴)(here)编写它。 L2 出现了一个问题,它有 195 个条目,因此新的 create 变量需要大于 20.000 个字符(这在 SPSS 中可能吗?),全部出现在一行中。
我想知道是否可以在代码中自动逐行使用excel2。 使用以下代码:
GET DATA
/TYPE=XLSX
/FILE=" D:\excel1.xlsx "
/SHEET=name 'Folha1'
/CELLRANGE=FULL
/READNAMES=ON
/DATATYPEMIN PERCENTAGE=95.0.
STRING cmd1 cmd2 (a200).
SORT CASES by List.
MATCH FILES /FILE=* /FirsT=first /LAST=last /BY List. /* marking first and last lines.
DO IF first.
COmpuTE cmd1="VARIABLE LABELS".
COmpuTE cmd2="VALUE LABELS".
END IF.
IF not first cmd1=concat(rtrim(cmd1)," "). /* "/" only appears from the second varname.
COmpuTE cmd1=concat(rtrim(cmd1)," ",Var_label).
COmpuTE cmd2=concat(rtrim(cmd2),Var).
DO IF last.
COmpuTE cmd1=concat(rtrim(cmd1),".").
COmpuTE cmd2=concat(rtrim(cmd2),' 1 "Afghanistan" 2 "Albania" (…) 195 "Zimbabwe".').
END IF.
EXECUTE.
SELECT IF ('List' 'L2').
ADD FILES /file=* /rename cmd1=cmd /file=* /rename cmd2=cmd.
EXECUTE.
我想知道是否有办法替换 '1 "Afghanistan" 2 "Albania" (...) 195 "Zimbabwe".'' 通过一些函数/程序从 excel2 中获取有关 L2 的信息,并显示它逐行:
(…)
VARIABLE LABELS V2 "Country"
/ V3 "Country Mother"
/ V4 "Country Father".
VALUE LABELS V2
V3
V4
1 "Afghanistan"
2 "Albania"
(…)
195 "Zimbabwe".
谢谢你帮助我!
解决方法
这个问题非常复杂,通常超出了 Stack-Overflow 问答的范围,但我的答案是:
首先,我重新创建了仅与值标签相关的示例数据部分:
data list list/var list (2a5).
begin data
"v1" "L1"
"v2" "L2"
"v3" "L2"
"v4" "L2"
end data.
dataset name xl1.
data list list/list (a5) nb (f5) nb_txt (a20).
begin data
"L1" 1 "Female"
"L1" 2 "Male"
"L2" 1 "Afghanistan"
"L2" 2 "Albania"
"L2" 43 "Israel"
"L2" 195 "Zimbabwe"
end data.
dataset name xl2.
data list list/v1 v2 v3 v4 (4f3).
begin data
1 1 2 3
2 2 2 43
1 2 1 195
end data.
dataset name gen.
现在开始工作:
第一部分是为每个变量标签列表创建一个宏。由于某些列表很长,我对每个值分别使用 ADD Value labels
。
dataset activate xl2.
string cmd (a200) cmdFin (a20).
sort cases by list nb.
match files /file=* /by list /first=first /last=last.
compute cmd=concat("add value labels !1 ",string(nb,f6)," '",rtrim(nb_txt),"' .").
if first cmd=concat("define dolist_",list," (!pos=!cmdend) ",rtrim(cmd)).
if last cmdFin=" !enddefine .".
write outfile="path\create value label macros.sps"/cmd/cmdfin.
exe.
insert file="path\create value label macros.sps".
插入生成的语法后,已为每个值列表定义了一个宏。现在我们创建一个额外的语法,为列表中的每个变量名称运行相关的宏:
dataset activate xl1.
string cmd (a200).
compute cmd=concat("dolist_"," ",var," .").
write outfile="path\run value label macros.sps"/cmd.
exe.
现在我们可以在原始数据上实际尝试生成的宏:
dataset activate gen.
insert file="path\run value label macros.sps".