SPSS中基于宏的条件变量构建方法求助
SPSS宏变量字符串解析问题解决
你的问题核心是SPSS宏中,引号内的宏变量不会被自动解析,所以type =("!name")这行里的!name不会被替换成传入的joe,而是直接作为字符串!name进行比较。
针对这个问题,有两种常见解决方式:
方式一:使用!concat拼接引号与宏变量
直接通过!concat将引号和宏变量!name拼接成完整的字符串常量:
define !reg (name= !tokens(1)). compute !concat(!name,'_f') = 0. if type = !concat("'", !name, "'") compute !concat(!name,'_f') = 1. execute. !enddefine. !reg name=joe.
这里用单引号包裹宏变量值,避免和SPSS语法中的双引号冲突,也可以用双引号,写法是!concat('"', !name, '"')。
方式二:使用!quote宏函数
!quote函数可以直接为宏变量添加引号,简化写法:
define !reg (name= !tokens(1)). compute !concat(!name,'_f') = 0. if type = !quote(!name) compute !concat(!name,'_f') = 1. execute. !enddefine. !reg name=joe.
!quote(!name)会自动把joe转换成'joe'(单引号包裹的字符串),符合SPSS的字符串比较语法。
两种方式都能实现你想要的效果:当type字段的值等于传入的name参数时,将name_f变量设为1,否则为0。
内容的提问来源于stack exchange,提问作者Mark Hedman
相关产品推荐
相关产品推荐

