【发布时间】:2018-01-04 14:46:51
【问题描述】:
您好,我是 SPSS 宏的初学者。我想知道人们是否可以告诉我是否可以使用宏在 if 语句中包含参数,例如
DEFINE !calc_spells (procedure = !TOKENS(1)).
*** Get the file.
get file ='C:\Users\mycomputer\Documents\file.sav'.
compute proc=0.
do repeat a=op1a to op4b.
if any(substr(a,1,4), !procedure) proc=1.
end repeat.
execute.
select if proc=1.
execute.
string procedure(a4).
compute procedure=!procedure.
*** aggregate file.
aggregate outfile=*
/break year procedure
/median_cost median_stay = median(cost_spell_total_net total_stay)
/number_of_spells = n.
save outfile=!path_output + !QUOTE(!CONCAT(!procedure, '_output.sav')).
!enddefine.
!calc_spells procedure = A021.
!calc_spells procedure = A024.
基本上我想知道是否可以针对不同的过程代码重复此宏,而不是每次运行时手动更改代码?似乎我的代码不起作用,因为我根本没有收到任何案例?
【问题讨论】:
-
您的宏看起来不错,如果它没有给您预期的结果,则可能是宏中的语法问题。请发布您的数据样本,以便我们帮助查找错误。由于这是一个附加问题,您应该将其作为一个单独的问题发布。
-
@Ting Yang 你也可以使用
set mprint=on.这将在日志中打印调用宏产生的语法。正如 eli-k 指出的那样,从概念上讲,您想要实现的目标是可行的,但在某个地方存在与您的上下文细节有关的错误。 -
@Ting Yahng:为什么不使用
if substr(a,1,4) = !procedure proc=1.?仅当您想与更大的可能值列表进行比较时,才应使用any函数。您只是在与!procedure进行比较 -
感谢所有 cmets。有效。通过使用 mprint=on,我知道错误发生在哪里。通过在过程代码中添加引号实际上很容易解决,例如!calc_spells procedure = 'A021'。谢谢我有点傻,但它成功了。欢呼