如何在相同的语法过程中使用两个不同的 excel 文件?

问题描述

我有一个包含变量信息的 excel 文件 (excel1),另一个包含有关列表的信息 (excel2)。

enter image description here

为了创建一个语法来生成新的语法来创建 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".