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

Syntax 如何在同一语法过程中使用两个不同的excel文件?,syntax,spss,Syntax,Spss,我有一个包含变量信息(excel1)的excel文件,还有一个包含列表信息(excel2) 为了创建一个语法来生成一个新语法来创建变量和值标签,我使用了@eli.k提出的解决方案。 但是使用这个解决方案,我必须有一个带有列表的数据集,这样我就可以使用它,而不是“手工”(复制/粘贴)来编写它。L2有一个问题,它有195个条目,因此新的create变量需要大于20000个字符(在SPSS中可能吗?),全部出现在一行中 我想知道的是,是否有可能在代码中逐行自动使用excel2。 使用以下代码: GE

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

为了创建一个语法来生成一个新语法来创建变量和值标签,我使用了@eli.k提出的解决方案。 但是使用这个解决方案,我必须有一个带有列表的数据集,这样我就可以使用它,而不是“手工”(复制/粘贴)来编写它。L2有一个问题,它有195个条目,因此新的create变量需要大于20000个字符(在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”津巴布韦“.”替换为从excel2获取有关L2的信息并逐行显示的函数/过程:

(……)


谢谢你帮助我

这个问题相当复杂,通常超出堆栈溢出问答的范围,但我的答案是:

首先,我重新创建示例数据中仅与值标签有关的部分:

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.
现在开始工作:

第一部分是为每个变量标签列表创建一个宏。由于有些列表很长,我分别为每个值使用
添加值标签

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".

太好了,@eli-k!它工作得很好!非常感谢您的时间和帮助!我不知道为什么,但当我连续运行所有代码时,它会在第63582行给出以下错误消息:>error#1。命令名:!错误\u宏>行中的第一个字未被识别为SPSS统计命令。>停止执行此命令。3583 0 dolist_L1 v1。这可能是什么?这看起来像是生成的语法中的错误-可能是因为数据本身的错误。您应该打开它并运行它,而不是插入语法。然后查看哪一行生成了错误,以及命令所基于的数据中存在什么问题。非常感谢!
dataset activate gen.
insert file="path\run value label macros.sps".