Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax 在SPSS中生成语法的语法_Syntax_Spss - Fatal编程技术网

Syntax 在SPSS中生成语法的语法

Syntax 在SPSS中生成语法的语法,syntax,spss,Syntax,Spss,我正在尝试构造一个语法来在SPSS中生成语法,但我遇到了一些问题… 我有一个包含元数据的excel文件,我想使用它来创建一个语法来从中提取信息(就像这样,如果我有一个巨大的数据库,我只需要不断更新excel—添加/删除变量等—然后运行一个语法来提取新语法所需的信息)。 我还注意到生成的语法总是在15Mb左右,这是一个很大的数目(适用于500多行)! 由于在不同的计算机和/或配置中运行语法,我不使用Python。 有什么想法吗?有人能帮我吗? 先谢谢你 示例: (test.xlsx–表1) 变量代

我正在尝试构造一个语法来在SPSS中生成语法,但我遇到了一些问题… 我有一个包含元数据的excel文件,我想使用它来创建一个语法来从中提取信息(就像这样,如果我有一个巨大的数据库,我只需要不断更新excel—添加/删除变量等—然后运行一个语法来提取新语法所需的信息)。 我还注意到生成的语法总是在15Mb左右,这是一个很大的数目(适用于500多行)! 由于在不同的计算机和/或配置中运行语法,我不使用Python。 有什么想法吗?有人能帮我吗? 先谢谢你

示例:
(test.xlsx–表1)
变量代码标签列表变量标签(串联变量+标签)
v13性别1 V1“性别”
V2 1工作2 V2“工作”
V3国家3 V3“国家”
V4 1已婚2 V4“已婚”
V5 1儿童版2 V5“儿童版”
V6 2满意1 4 V6“满意1”
V7 2满意4 V7“满意2”

(来自其他文件的信息)
列表=1
1“男性”
2“女性”
列表=2
1“是”
2“否”
列表=3
1“欧洲”
2“美国”
3“亚洲”
4“非洲”
5“大洋洲”
列表=4
1“非常不满意”
10“非常满意”

我想创建一个语法,生成一个新语法来应用“变量标签”和“值标签”。所以,我想到了这样的事情:

GET DATA
/TYPE=XLSX
/FILE="test.xlsx"
/SHEET=name 'sheet 1'
/CELLRANGE=FULL
/READNAMES=ON
/DATATYPEMIN PERCENTAGE=95.0.
EXECUTE.

STRING vlb (A15) labels (A150) value (A12) lab (A1500) point (A2) separate (A50) space (A2) list1 (A100) list2 (A100).

SELECT IF (Code=1).
COMPUTE vlb = "VARIABLE LABELS".
COMPUTE labels = CONCAT (RTRIM(Var_label)," ").
COMPUTE point = ".".
COMPUTE value = "VALUE LABELS".
COMPUTE lab = CONCAT (RTRIM(Var)," ").
COMPUTE list1 = '1 " Yes "'.
COMPUTE list2 = '2 "No".'.
COMPUTE space = " ".
COMPUTE separate="************************************************.".

WRITE OUTFILE = "list_01.sps" / vlb.
WRITE OUTFILE = "list_01.sps" /labels.
WRITE OUTFILE = "list_01.sps" /point.
WRITE OUTFILE = "list_01.sps" /value.
WRITE OUTFILE = "list_01.sps" /lab.
WRITE OUTFILE = "list_01.sps" /list1.
WRITE OUTFILE = "list_01.sps" /list2.
WRITE OUTFILE = "list_01.sps" /space.
WRITE OUTFILE = "list_01.sps" /separate.
WRITE OUTFILE = "list_01.sps" /space.
如果只有一个变量具有相同的列表(ex:V1),则其工作正常。但是,如果有多个变量具有相同的列表,它将复制与变量数量相同的代码(例如:V2、V4和V5)

运行上述代码后,我拥有的(例如:V2、V4和V5):

可变标签
V2“工作”
.
值标签
V2
1“是”
2“否”
************************************************.
可变标签
V4“已婚”
.
值标签
V4
1“是”
2“否”
************************************************.
可变标签
V5“孩子们”
.
值标签
V5
1“是”
2“否”
************************************************

我想要的是:

可变标签
V2“工作”
V4“已婚”
V5“孩子们”
.
值标签
V2 V4 V5
1“是”

2“否”

我认为可能有一些方法可以更好地自动化整个过程,包括使用第二个数据源。但是对于这个问题的范围,我会建议一种方法来得到你特别要求的东西

关键是为第一行和最后一行构建具有特殊条件的命令:

string cmd1 cmd2 (a200).
sort cases by code.
match files /file=* /first=first /last=last /by code. /* 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 " Yes "  2 "No". ').
end if.
exe.
命令现在已经准备好了,但我们不想让它们混淆,所以我们将一个一个地堆叠它们,然后再将它们写出来:

add files /file=* /rename cmd1=cmd /file=* /rename cmd2=cmd.
exe.
WRITE OUTFILE = "var definitions.sps" / cmd .
exe.
编辑: 请注意,上面的代码假设您已经运行了一个
select cases if code=并且在所有剩余的行中都有一个
code


请注意,我在末尾添加了一个
exe。
命令-如果不运行,新语法将显示为空。

非常感谢!它现在工作得很好:)一件小事。。。是否可以在语法代码中包含对(直接)从另一个excel文件(或同一文件test.xlsx中的不同工作表)提取列表的引用?如果我有一个超过100个条目(例如:country)的列表,它将为值标签创建一个巨大的行。提前感谢您在最后一期中提供的帮助。这是可以做到的,但您应该从一个新问题开始。另一方面,首先看看我的答案,你可能有足够的答案来解决这个问题。再次感谢!我关注你建议的帖子,它很有效!:)我很高兴!为了做到完美,我只需要一行一行地标注值(如果可能的话),因为我有450多个标签,这将使一行中的所有内容都变得巨大(可能需要创建一个长度为1000的字符串变量)。这应该是一个新问题,举个例子,将有助于找到解决方案