如何在同一语法过程中使用两个不同的 excel 文件?
How to use two different excel files in same syntax procedure?
我有一个包含变量信息的 excel 文件 (excel1) 和另一个包含列表 (excel2) 信息的文件。
为了创建一个语法来生成一个新的语法来创建变量和值标签,我使用了@eli.k 提出的解决方案。
但是对于这个解决方案,我必须有一个包含列表的数据集,这样我就可以使用它而不是“手工”编写它 (copy/paste) ()。 L2 出现了一个问题,它有 195 个条目,因此新创建的变量需要大于 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“阿富汗”2“阿尔巴尼亚”(…)195“津巴布韦”。''一些function/procedure从[=33获取信息=]2 关于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_", list, " ", var, " .").
write outfile="path\run value label macros.sps"/cmd.
exe.
现在我们可以实际在原始数据上尝试生成的宏:
dataset activate gen.
insert file="path\run value label macros.sps".
我有一个包含变量信息的 excel 文件 (excel1) 和另一个包含列表 (excel2) 信息的文件。
为了创建一个语法来生成一个新的语法来创建变量和值标签,我使用了@eli.k
我想知道的是,是否可以在代码中逐行自动使用 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“阿富汗”2“阿尔巴尼亚”(…)195“津巴布韦”。''一些function/procedure从[=33获取信息=]2 关于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_", list, " ", var, " .").
write outfile="path\run value label macros.sps"/cmd.
exe.
现在我们可以实际在原始数据上尝试生成的宏:
dataset activate gen.
insert file="path\run value label macros.sps".