【问题标题】:Using macro to repeat aggregate command使用宏重复聚合命令
【发布时间】:2020-03-04 17:23:06
【问题描述】:

我有一个包含 parcomm、subcomm、ccs、prov、data 列的数据集。我想获得前四列数据的汇总结果。我使用了如下所述的spss代码

DEFINE myvars (arg=TOKENS(4)).
aggregate 
/OUTFILE=* MODE=ADDVARIABLES 
/BREAK=!arg
/sum_!arg=sum(data).
!ENDDEFINE.

myvars parcomm subcomm ccs prov.  

错误显示

第 2 列中的错误 #10933。文本:parcomm 新定义 AGGREGATE 命令上的变量必须以斜杠结尾。 该命令的执行停止。

当我只尝试一个令牌时,出现以下错误:

 DEFINE myvars (arg=!TOKENS(1)). 
 aggregate  /OUTFILE=* MODE=ADDVARIABLES  
 /BREAK=!arg   
 /sum_sum=sum(data). 
 !ENDDEFINE. 
 myvars arg=prov.  

第 48 列中的错误 # 10934。文本:prov. AGGREGATE 命令指定一个未知的现有变量名称。 此命令的执行停止。

我应该如何解决这个问题?

【问题讨论】:

  • 你不能像这样使用!arg:` /sum_!arg=sum(data).` 你想在这里实现什么?您要运行的非宏语法是什么?在您的第二段代码中,您可能使用了一个不存在的变量 - dataprov 在您的数据集中不存在

标签: spss


【解决方案1】:

如果我理解正确,您尝试做的是每次使用不同的中断变量运行aggregate,向数据集添加总和聚合。 宏可以帮助循环变量,但您的宏缺少的是实际的循环。试试这个:

首先创建一个小数据集进行演示:

data list list/parcomm subcomm ccs prov data (5f2).
begin data
1 2 3 4 25
3 2 3 2 33
1 2 3 2 42
4 1 4 1 66
end data.

现在下面的宏将遍历宏调用中的变量列表并在每个变量上运行aggregate

DEFINE myvars (arg=!cmdend).
!do !vr !in(!arg)
aggregate 
/OUTFILE=* MODE=ADDVARIABLES 
/BREAK=!vr
/!concat("sum_",!vr) = sum(data).
!doend
!ENDDEFINE.

myvars arg=parcomm subcomm ccs prov. 

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2014-08-21
    相关资源
    最近更新 更多