如何在同一语法过程中使用两个不同的 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".