【发布时间】:2013-08-15 13:14:31
【问题描述】:
我正在努力采用来自http://www.spsstools.net/ 的语法/宏之一。
它旨在更改没有前导零的“多对多”变量的标签,但我的变量确实有这些:
DATA LIST LIST /id.
BEGIN DATA
1
END DATA.
NUMERIC set01sub1 TO set01sub4.
* but the intended variable names are set01sub01 TO set01sub04 (with leading zeros and going over 10).
SET MPRINT=yes.
DEFINE !label (lab=!TOKENS(1) /stem=!TOKENS(1) /nb1=!TOKENS(1) /nb2=!TOKENS(1))
!DO !cnt=!nb1 !TO !nb2
!LET !var=!CONCAT(!stem,!cnt)
!LET !labe=!QUOTE(!CONCAT(!UNQUOTE(!lab),!cnt))
VARIABLE LABEL !var !labe.
!DOEND.
!ENDDEFINE.
!label lab='Set 1, subset ' stem=set01sub nb1=1 nb2=4.
我太天真了,我试过用!STRING(...,N2):
!LET !labe=!QUOTE(!CONCAT(!UNQUOTE(!lab),!STRING(!cnt,N2)))
但是,这并没有按预期工作
我的变量是
subID
rvnAns_s01m01 TO rvnAns_s01m12
rvnAns_s02m01 TO rvnAns_s02m36
rvnAns_s03m01 TO rvnAns_s03m36
rvnEva_s01m01 TO rvnEva_s01m12
rvnEva_s02m01 TO rvnEva_s02m36
rvnEva_s03m01 TO rvnEva_s03m36
预期的标签是:
"Subject ID"
"RAPM, Series 01, Matrix 01 answer"
"RAPM, Series 01, Matrix 02 answer"
...
"RAPM, Series 01, Matrix 12 answer"
"RAPM, Series 02, Matrix 01 answer"
"RAPM, Series 02, Matrix 02 answer"
...
"RAPM, Series 02, Matrix 36 answer"
"RAPM, Series 03, Matrix 01 answer"
"RAPM, Series 03, Matrix 02 answer"
...
"RAPM, Series 03, Matrix 36 answer"
和
"RAPM, Series 01, Matrix 01 answer evaluation"
"RAPM, Series 01, Matrix 02 answer evaluation"
...
"RAPM, Series 01, Matrix 12 answer evaluation"
"RAPM, Series 02, Matrix 01 answer evaluation"
"RAPM, Series 02, Matrix 02 answer evaluation"
...
"RAPM, Series 02, Matrix 36 answer evaluation"
"RAPM, Series 03, Matrix 01 answer evaluation"
"RAPM, Series 03, Matrix 02 answer evaluation"
...
"RAPMs, Series 03, Matrix 36 answer evaluation"
我将非常感谢任何有关如何实现此结果的帮助或建议。
【问题讨论】:
-
帮自己一个忙,切换到 python 模块。它们更加灵活,您可以询问人们它们有什么问题......
-
@ChristianSauer 好的,使用 python 模块会很容易吗?一个工作样本将不胜感激。我是语法新手,但愿意学习(尤其是任何可以提高生产力的东西,因为我正在写我的学士论文并且时间紧迫)......
-
不幸的是,我不能保证这很容易,但它看起来很容易。我目前没有时间制作工作样品,抱歉!但是:我猜你是语法新手,想警告你关于旧的宏:很少有人会写它们,而且它们不如 python 宏灵活。甚至学习曲线也好很多,因为 Python 被广泛使用。
标签: spss