SPSS Modeler常用函数简介
SPSS Modeler软件包含多种功能丰富的函数,几乎涵盖了我们日常工作的各种需要,主要有信息函数、转换函数、比较函数、逻辑函数、数值函数、三角函数、概率函数、位元整数运算、随机函数、字符串函数、日期和时间函数、序列函数、全局函数、空值和Null值处理函数、特殊函数等15大类,本讲义将逐一介绍并说明其注意事项。
在本讲义中涉及到的函数,具体的字段格式按照如下约定表示:
BOOL | 布尔值或标志,例如真或假 |
NUM、NUM1、NUM2 | 任意数字 |
REAL、REAL1、REAL2 | 任意实数,例如1.69、-7.8 |
INT、INT1、INT2 | 任意整数,例如1或-6 |
CHAR | 字符代码,例如’D’ |
STRING | 字符串,例如”bookID” |
LIST | 项目列表,例如[“my””teacher”] |
ITEM | 字段,例如Customer或extract_concept |
DATE | 其值具有DD-MON-YYYY这样格式的日期字段,例如start_date |
TIME | 其值具有HHMMSS这样格式的时间字段,例如power_flux |
此外,本讲义中的函数以函数、结果类型(整数、字符串等)和说明(如果有)各占一列的形式一一列举说明。例如,对函数rem的说明如下。
功能 | 结果 | 说明 |
INT1 rem INT2 | 数值 | 返回INT1除以INT2所得的余数,例如,INT1-(INT1 div INT2)*INT2 |
- 信息函数
信息函数用于深入了解特定字段的值。它们通常用于派生标志字段。例如,可以使用@BLANK函数来创建一个标志字段,以指示选定字段的值为空值的记录。同样,可以使用存储类型函数(如is_string)来检查某个字段的存储类型。
功能 | 结果 | 说明 |
@BLANK(FIELD) | 布尔值 | 根据上游类型节点或源节点(“类型”选项)中设置的空值处理规则对值为空值的所有记录返回真值。注意,不能通过脚本调用此函数 |
@NULL(ITEM) | 布尔值 | 为未定义值的所有记录返回真值。未定义值是系统Null值,在Modeler中显示为$null$,注意:此功能无法通过脚本调用 |
is_date(ITEM) | 布尔值 | 为所有日期类型的记录返回真值 |
is_datetime(ITEM) | 布尔值 | 为所有日期时间类型的记录返回真值 |
is_integer(ITEM) | 布尔值 | 为所有整数类型的记录返回真值 |
is_number(ITEM) | 布尔值 | 为所有数值类型的记录返回真值 |
is_real(ITEM) | 布尔值 | 为所有实数类型的记录返回真值 |
is_string(ITEM) | 布尔值 | 为所有字符串类型的记录返回真值 |
is_time(ITEM) | 布尔值 | 为所有时间类型的记录返回真值 |
is_timestamp(ITEM) | 布尔值 | 为所有时间戳类型的记录返回真值 |
- 转换函数
转换函数可用来构建新字段和转换现有文件的存储类型。例如,可通过将字符串连接在一起或分拆字符串来形成新字符串。若要连接两个字符串,请使用运算符“><”。例如,字段Site的值为”BRAMLEY”,则”xx”><Site将返回”xxBRAMLEY”。即使参数不是字符串,“><”的结果也始终是字符串,因此,如果字段V1为3,字段V2为5,则V1><V2将返回”35″(字符串而非数值)。请注意,转换函数及其他要求特定类型输入(如日期或时间值)的函数取决于“流选项”对话框中指定的当前格式。例如,要将值为Jan2003、Feb2003等的字符串字段转换为日期存储格式,请选择MONYYYY作为流的默认日期格式。
功能 | 结果 | 说明 |
ITEM1><ITEM2 | 字符串 | 连接两个字段的值,并返回结果字符串ITEM1、ITEM2 |
to_integer(ITEM) | 整数 | 将指定字段的存储值转换为整数 |
to_real(ITEM) | 实数 | 将指定字段的存储值转换为实数 |
to_number(ITEM) | 数值 | 将指定字段的存储值转换为数值 |
to_string(ITEM) | 字符串 | 将指定字段的存储值转换为字符串 |
to_time(ITEM) | 时间 | 将指定字段的存储值转换为时间 |
to_date(ITEM) | 日期 | 将指定字段的存储值转换为日期 |
to_timestamp(ITEM) | 时间戳 | 将指定字段的存储值转换为时间戳 |
to_datetime(ITEM) | 日期时间 | 将指定字段的存储值转换为日期时间值 |
- 比较函数
比较函数用于字段值的相互比较或与指定字符串进行比较。例如,可以使用“=”来检查字符串是否相等。字符串相等的验证示例:Class=”class1″。对数值比较来说,大于表示离正无穷更近,小于表示离负无穷更近,即所有负数均小于任意正数。
功能 | 结果 | 说明 |
TEM1=ITEM2 | 布尔值 | 为ITEM1等于ITEM2的记录返回真值 |
ITEM1/=ITEM2 | 布尔值 | 两个字符串不完全相同时返回真值,完全相同时返回0 |
ITEM1<ITEM2 | 布尔值 | ITEM1小于ITEM2的记录返回真值 |
ITEM1<=ITEM2 | 布尔值 | ITEM1小于等于ITEM2的记录返回真值 |
ITEM1>ITEM2 | 布尔值 | ITEM1大于ITEM2的记录返回真值 |
ITEM1>=ITEM2 | 布尔值 | ITEM1大于等于ITEM2的记录返回真值 |
count_equal(ITEM1,LIST) | 整数 | 返回字段列表中等于ITEM1的值的个数,如果ITEM1为Null,则返回Null |
count_greater_than(ITEM1,LIST) | 整数 | 返回字段列表中大于ITEM1的值的个数,如果ITEM1为Null,则返回Null |
count_less_than(ITEM1,LIST) | 整数 | 返回字段列表中小于ITEM1的值的个数,如果ITEM1为Null,则返回Null |
count_not_equal(ITEM1, | 整数 | 返回字段列表中不等于ITEM1的值的个数,如果ITEM1为Null,则返回Null |
ount_nulls(LIST) | 整数 | 返回字段列表中Null值的个数 |
date_before(DATE1,DATE2) | 布尔值 | 用于检查日期值的排序。如果DATE1早于DATE2,则返回真值 |
max(ITEM1,ITEM2) | Any | 返回ITEM1和ITEM2两项中较大的一个 |
max_n(LIST) | 数值 | 返回数值字段列表中的最大值,如果所有字段值为Null,则返回Null |
min(ITEM1,ITEM2) | Any | 返回ITEM1和ITEM2两项中较小的一个 |
min_n(LIST) | 数值 | 返回数值字段列表中的最小值,如果所有字段值为Null,则返回Null |
time_before(TIME1,TIME2) | 布尔值 | 用于检查时间值的排序。如果TIME1早于TIME2,则返回真值 |
member(ITEM,LIST) | 布尔值 | 如果ITEM是指定LIST的成员,则返回真值,否则返回假值,还可以指定字段名称列表 |
- 逻辑函数
MODELER表达式可用来执行逻辑运算,主要功能如下。
功能 | 结果 | 说明 |
COND1 and COND2 | 布尔值 | 此运算为逻辑合取运算,当COND1与COND2同时为真时返回真值,如果COND1为假,则不求COND2的值,此时可以构造这样的合取,让COND1首先检验COND2中的运算是否合法,例如,length(Label)>=6 and Label(6)=’x’ |
COND1 or COND2 | 布尔值 | 此运算为逻辑(包含性)析取运算,当COND1或COND2为真或这两者同时为真时,返回真值,如果COND1为真,则不求COND2的值 |
not(COND) | 布尔值 | 此运算为逻辑否运算,当COND为假时返回真,否则,此运算将返回值0 |
If COND then EXPR1 else EXPR2 endif | Any | 此运算为条件求值,如果COND为真,此运算将返回EXPR1的结果,否则,将返回EXPR2的求值结果 |
If COND1 then EXPR1 Elseif COND2 then EXPR2 else EXPR_N endif |
Any
|
此运算为多分支条件求值。如果COND1为真,此运算将返回EXPR1的结果,如果COND2为真,此运算将返回EXPR2的求值结果,否则,将返回EXPR_N的求值结果 |
- 数值函数
MODELER包含许多常用的数值函数,主要功能如下。
功能 | 结果 | 说明 |
-NUM | 数值 | 用于求NUM的相反数,返回具有相反符号的对应数字 |
NUM1+NUM2 | 数值 | 返回NUM1与NUM2相加所得的和 |
code-NUM2 | 数值 | 返回NUM1减去NUM2所得的差 |
NUM1*NUM2 | 数值 | 返回NUM1与NUM2相乘所得的积 |
NUM1/NUM2 | 数值 | 返回NUM1除以NUM2所得的商 |
INT1 div INT2 | 数值 | 用于进行整数除法。返回INT1除以INT2所得的商 |
INT1 rem INT2 | 数值 | 返回INT1除以INT2所得的余数,例如,INT1-(INT1 div INT2)*INT2 |
INT1 mod INT2 | 数值 | 此函数已被rem函数取代,不宜再使用 |
BASE ** POWER | 数值 | 返回BASE的POWER次方,底和幂可以是任意数字(一种情况除外:如果POWER为除整数0之外其他类型的0,则BASE不能为0)。如果POWER为整数,则可通过将BASE连续乘POWER次计算出结果,因此,如果BASE为整数,则结果为整数。如果POWER为整数0,则结果将始终是与BASE类型相同的1。如果POWER不是整数,则用公式exp(POWER * log(BASE))计算结果 |
abs(NUM) | 数值 | 返回NUM的绝对值,结果始终是同一类型的数值 |
exp(NUM) | 实数 | 返回e的NUM次方(e为自然对数的底) |
fracof(NUM) | 实数 | 返回NUM的小数部分,定义为NUM-intof(NUM) |
intof(NUM) | 整数 | 将其参数截为整数,返回与NUM符号相同的整数,取满足abs(INT)<=abs(NUM)的最大值 |
log(NUM) | 实数 | 返回NUM的自然对数(以e为底),NUM不能为零(无论何种类型) |
log10(NUM) | 实数 | 返回NUM以10为底的对数,NUM不能为零(无论何种类型)。此函数定义为log(NUM)/log(10) |
negate(NUM) | 数值 | 用于求NUM的相反数,返回具有相反符号的对应数字 |
round(NUM) | 整数 | 用于将NUM四舍五入取整数,如果NUM为正数,则用公式intof(NUM+0.5),如果NUM为负数,则用公式intof(NUM-0.5) |
sign(NUM) | 数值 | 用于确定NUM的符号,如果NUM为整数,此运算将返回-1、0或1。如果NUM为实数,将返回-1.0、0.0或1.0,取决于NUM是负数、零还是正数 |
sqrt(NUM) | 实数 | 返回NUM的平方根,NUM必须是正数 |
sum_n(LIST) | 数值 | 返回数值字段列表中字段值的和,如果所有字段均为Null,则返回Null值 |
mean_n(LIST) | 数值 | 返回数值字段列表中字段值的均值,如果所有字段值均为Null值,则返回Null值 |
sdev_n(LIST) | 数值 | 返回数值字段列表中字段值的标准差,如果所有字段值均为Null值,则返回Null值 |
- 三角函数
三角函数以角度为参数或返回结果为角度,无论哪种情况,角度单位(弧度或度数)均由相关流选项的设置控制。
功能 | 结果 | 说明 |
arccos(NUM) | 实数 | 计算指定角度的反余弦值 |
arccosh(NUM) | 实数 | 计算指定角度的反双曲余弦值 |
arcsin(NUM) | 实数 | 计算指定角度的反正弦值 |
arcsinh(NUM) | 实数 | 计算指定角度的反双曲正弦值 |
arctan(NUM) | 实数 | 计算指定角度的反正切值 |
arctan2(NUM_X,NUM_Y) | 实数 | 计算NUM_Y/NUM_X的反正切值,然后使用两个数的符号推导出象限信息。结果是范围在-pi<ANGLE<=pi(弧度)-180<ANGLE<=180(度数)间的实数 |
arctanh(NUM) | 实数 | 计算指定角度的反双曲正切值 |
cos(NUM) | 实数 | 计算指定角度的余弦值 |
cosh(NUM) | 实数 | 计算指定角度的双曲余弦值 |
pi | 实数 | 此常数是pi的最佳实数近似值 |
sin(NUM) | 实数 | 计算指定角度的正弦值 |
sinh(NUM) | 实数 | 计算指定角度的双曲正弦值 |
tan(NUM) | 实数 | 计算指定角度的正切值 |
tanh(NUM) | 实数 | 计算指定角度的双曲正切值 |
- 概率函数
概率函数返回基于各种分布的概率,主要功能如下。
功能 | 结果 | 说明 |
cdf_chisq(NUM,DF) | 实数 | 返回具有指定自由度的卡方分布中某个值将会小于指定数值的概率 |
cdf_f(NUM,DF1,DF2) | 实数 | 返回自由度为DF1和DF2的F分布中某个值将会小于指定数值的概率 |
cdf_normal(NUM,MEAN,STDDEV) | 实数 | 返回具有指定均值和标准差的正态分布中某个值将会小于指定数值的概率 |
cdf_t(NUM,DF) | 实数 | 返回具有指定自由度的学生氏t分布中某个值将会小于指定数值的概率 |
- 位元整数运算
借助上述函数,可以按表示二进制补码值的位模式(其中位的位置N的权重为2**N)来操控整数。位从0开始往上数,这些运算就好像是把整数的符号位向左无限延伸,因此,最高有效位前的所有位,正整数均为0,负整数均为1,注意:不能从脚本中调用位元函数。
功能 | 结果 | 说明 |
~~INT1 | 整数 | 产生整数INT1的位元补码,即INT1每个为0的位经过求补运算后结果均为1。对于求补运算,始终有~~INT=-(INT+1)成立。此功能无法通过脚本调用 |
INT1||INT2 | 整数 | 此运算的结果是INT1和INT2的位元“或”,即INT1和INT2中的一个对应位是1或两者的对应位同时是1时,“或”的结果为1 |
INT1||/&INT2 | 整数 | 此运算的结果是INT1和INT2的位元“异或”,即INT1和INT2中的一个对应位是1但非同时为1时“异或”后的结果为1 |
INT1&&INT2 | 整数 | 产生整数INT1和INT2的位元“与”,即INT1和INT2的对应位同时为1时进行“与”运算的结果才为1 |
INT1&&~~INT2 | 整数 | 将对INT1和INT2位元求补后的结果进行位元“与”运算,即INT1的对应位是1且INT2的对应位是0时进行这一运算后的结果才为1。此运算与INT1&&(~~INT2)运算的结果相同,可用于清除在INT2中设置的INT1位 |
INT<<N | 整数 | 产生INT1向左偏移N个位置的位元模式,如果N为负值,则向右移 |
INT>>N | 整数 | 产生INT1向右偏移N个位置的位元模式,如果N为负值,则向左移 |
INT1&&=_0 INT2 | 布尔值 | 相当于布尔表达式INT1&&INT2/==0,但效率更高 |
INT1&&/=_0 INT2 | 布尔值 | 相当于布尔表达式INT1&&INT2==0,但效率更高 |
integer_bitcount(INT) | 整数 | 计数INT的二进制补码表示中1或0的个数。如果INT是非负数,则N为1的个数。如果INT为负数,则N为0的个数。非负整数中将有无数个0,而负整数中将有无数个1。对于此运算,始终有integer_bitcount(INT)=integer_bitcount(-(INT+1))成立 |
integer_leastbit(INT) | 整数 | 返回整数INT中最低有效位组的数位位置N。N是2的最大权重,据此INT将进行准确划分 |
integer_length(INT) | 整数 | 以二进制补码的整数形式返回INT的数位长度,即N是最小整数(INT<(1<<N) if INT>=0INT>=(-1<<N) if INT<0)。如果INT为非否数,则表示为无符号整数的INT需要至少N位的一个字段。另外,最少需要用N+1个数位来表示有符号整数INT(不论符号是正是负) |
testbit(INT,N) | 布尔值 | 检验整数INT中位置N处的数位,并以布尔值的形式(真表示状态为1,假表示状态为0)返回数位N的状态 |
- 随机函数
以下函数用于随机选择项目或随机生成数值,主要功能如下。
功能 | 结果 | 说明 |
oneof(LIST) | Any | 返回一个从LIST中随机选择的元素。应以[ITEM1,ITEM2,…,ITEM_N]的形式输入列表项,注意,还可以指定字段名列表 |
random(NUM) | 数值 | 返回类型相同(INT或REAL)的均匀分布随机数,其范围从1~NUM。如果使用的是整数,则仅返回整数。如果使用(十进制)实数,则返回实数(由流选项确定的十进制精度)。此函数所返回的最大随机数可以等于NUM |
random0(NUM) | 数值 | 此函数的属性与random(NUM)相同,但将从0开始取值。它所返回的最大随机数决不会等于X |
- 字符串函数
在MODELER中可以对字符串执行以下操作:比较字符串、创建字符串、访问字符串。在MODELER中,字符串是一对英文双引号(”string quotes”)之间的一组字符序列。这里所用的字符(CHAR)可以是任何一个字母、数字字符。这些字符已在MODELER表达式中使用反单引号并以'<character>’的形式声明过,例如’z’、’A’或’2’。如果字符超出边界或为字符中的负指数,则结果将返回Null值。
功能 | 结果 | 说明 |
allbutfirst(N,STRING) | 字符串 | 返回字符串STRING除去前N个字符后所生成的新字符串 |
allbutlast(N,STRING) | 字符串 | 返回字符串STRING除去后N个字符后所生成的新字符串 |
alphabefore(STRING1,STRING2) | 布尔值 | 用于检查字符串的数字字母顺序,如果STRING1在STRING2之前,则返回真值 |
endstring(LENGTH,STRING) | 字符串 | 从指定字符串中抽取后n个字符,如果字符串长度小于或等于指定长度,则字符串不发生改变 |
hasendstring(STRING,SUBSTRING) | 整数 | 此函数的功能等同于isendstring (SUB_STRING,STRING) |
hasmidstring(STRING,SUBSTRING) | 整数 | 此函数的功能等同于ismidstring (SUB_STRING,STRING)(嵌入的子字符串) |
hasstartstring (STRING,SUBSTRING) | 整数 | 此函数的功能等同于isstartstring (SUB_STRING,STRING) |
hassubstring(STRING,N,SUBSTRING) | 整数 | issubstring(SUB_STRING,N,STRING),这里N的默认值为1 |
count_substring(STRING,SUBSTRING) | 整数 | 返回字符串中指定字符串出现的次数。例如,count_substring(“foooo.txt”,”oo”)返回结果为3 |
hassubstring(STRING,SUBSTRING) | 整数 | 此函数的功能等同于issubstring(SUB_STRING,1STRING),这里N的默认值为1 |
isalphacode(CHAR) | 布尔值 | 如果CHAR是字符代码,且为字母的指定字符串中的某个字符,则返回真值,否则,返回值为0,例如isalphacode(produce_num(1)) |
isendstring(SUBSTRING,STRING) | 整数 | 如果字符串STRING以子字符串SUB_STRING结尾,则将返回STRING中子字符串SUB_STRING的整数下标。此外,此函数的返回结果为0 |
islowercode(CHAR) | 布尔值 | 如果CHAR是指定字符串(通常为字段名)中的某个小写字母字符,则将返回真值,否则,该函数的返回值为0,例如islowercode(”)->T和islowercode(country_name(2))->T均为有效表达式 |
ismidstring(SUBSTRING,STRING) | 整数 | 如果SUB_STRING是STRING的子字符串,但首字符或尾端字符与STRING不同,则将返回此子字符串的起始下标,否则,此函数将返回值0 |
isnumbercode(CHAR) | 布尔值 | 如果指定字符串(通常为字段名)的CHAR为数字字符,则返回真值,否则,返回值为0,例如isnumbercode(product_id(2)) |
isstartstring(SUBSTRING,STRING) | 整数 | 如果字符串STRING以子字符串SUB_STRING开头,则该函数将返回下标1,除此以外,该函数的返回结果为0 |
issubstring(SUBSTRING,N,STRING) | 整数 | 从字符串STRING中搜索(从第N个字符开始)等于SUB_STRING的子字符串,如果找到子字符串,则该函数返回相匹配子字符串的起始下标,否则,此函数将返回值0。如果未指定N,则此函数的默认值为1 |
issubstring(SUBSTRING,STRING) | 整数 | 从字符串STRING中搜索(从第N个字符开始)等于SUB_STRING的子字符串。如果找到子字符串,则该函数返回相匹配子字符串的起始下标,否则,此函数将返回值0,如果未指定N,则此函数的默认值为1 |
issubstring_count(SUBSTRING,N,STRING): | 整数 | 返回STRING中第N次出现的SUBSTRING的索引。如果SUBSTRING的出现次数少于N次,则返回结果为0 |
issubstring_lim(SUBSTRING,N,STARTLIM,ENDLIM,STRING) | 整数 | 此函数的功能与issubstring相同,但匹配必须从下标STARTLIM或其之前开始,并且必须从下标ENDLIM或其之前结束。若为任一参数提供假值,则可禁用STARTLIM或ENDLIM限制,例如,issubstring_lim(SUB_STRING,N,false,false,STRING)与issubstring功能相同 |
isuppercode(CHAR) | 布尔值 | 如果CHAR是大写字母字符,则返回真值,除此以外,该函数的返回值为0,例如isuppercode (country_name(2))->T为有效表达式 |
last(CHAR) | 字符串 | 返回STRING(长度至少为一个字符)的最后一个字符CHAR |
length(STRING) | 整数 | 返回字符串STRING的长度,即字符串字符数 |
locchar(CHAR,N,STRING) | 整数 | 用于标识符号字段中的字符位置。此函数将在字符串STRING中搜索字符CHAR(从STRING的第N个字符开始搜索)。此函数的返回值表示(从N开始)找到字符的位置。如果未找到字符,则函数返回结果为0。如果此函数存在无效偏移(N)(例如,某个偏移超出了字符串长度),则函数返回结果为$null$,例如locchar(‘n’,2,web_page)在名为web_page的字段中从第2个字符开始搜索字符’n’。注意:请用反单引号将指定字符引起 |
locchar_back(CHAR,N,STRING) | 整数 | 此函数类似于locchar函数,所不同的是搜索反向进行且从第N个字符开始。例如,locchar_back(‘n’,9,web_page)将从web_page的第9个字符开始搜索并且从后向前移动搜索。如果此函数拥有无效偏移(例如偏移超出字符串的长度),则此函数的返回结果为$null$。理想的情形是:将locchar_back与length(<field>)函数结合使用,以便动态地使用字段当前值的长度,例如locchar_back(‘n’,(length(web_page)),web_page) |
lowertoupper(CHAR)
lowertoupper(STRING) |
CHAR或String | 可以输入字符或字符串,此函数将返回一个类型相同项,小写字符将转换为大写字符。例如,有效表达式:lowertoupper(“Mystring”)和lowertoupper(field_name(2)) |
matches | 布尔值 | 如果字符串与指定模式(例如company_namematches”SPSS”)相匹配,将返回真值。模式必须是字符串字符,而不能是包含模式的字段名。问号(?)包含在模式中以便匹配某一字符,星号(*)可以匹配零个或多个字符。若要匹配文字问号或星号(而不是将其用作通配符),可使用反斜杠(\)作为转义符号 |
replace(SUBSTRING,NEWSUBSTRING,STRING) | 字符串 | 在指定STRING中,用NEWSUBSTRING替换SUBSTRING中的所有示例 |
replicate(COUNT,STRING) | 字符串 | 返回一个由原始字符串指定个数的复本所构成的字符串 |
stripchar(CHAR,STRING) | 字符串 | 借助此函数,可从某个字符串或字段中除去指定字符。例如,可以使用此函数从数据中除去多余符号(如货币符号)以获取一个简单的数值或名称。例如,通过语法stripchar(‘$’,’Cost’)可以除去所有值中的美元符号并返回一个新字段。注:请用反单引号将指定字符引起 |
skipchar(CHAR,N,STRING) | 整数 | 在字符串STRING中搜索除CHAR以外的字符(从第N个字符开始搜索)。此函数返回一个表示发现子字符串位置的整数子字符串,如果从第N个位置开始的每个字符是CHAR,则返回0。如果函数有一无效偏移(例如,超出字符串长度的偏移),则该函数返回$null$。locchar函数经常与skipchar配合使用以确定N(开始搜索字符串的位置)的值。例如skipchar(‘s’,(locchar(‘s’,1,”MyString”)),”MyString”) |
skipchar_back(CHAR,N,STRING) | 整数 | 与skipchar函数类似,所不同的是搜索反向进行并且从第N个字符开始 |
startstring(LENGTH,STRING) | 字符串 | 从指定字符串中抽取第n个字符。如果字符串长度小于或等于指定长度,则字符串不发生改变 |
strmember(CHAR,STRING) | 字符串 | 等同于locchar(CHAR,1,STRING)函数。此函数返回整数子字符串或0,返回的整数子字符串表示CHAR第一次出现的位置。如果函数存在无效偏移(例如,超出字符串长度的偏移),则返回$null$ |
subscrs(N,STRING) | CHAR | 返回输入字符串STRING的第N个字符CHAR。此函数也可采用简写形式:STRING(N)->CHAR。例如,lowertoupper(“name”(1))就是一个有效表达式 |
substring(N,LEN,STRING) | 字符串 | 返回从位于下标N的字符开始的字符串SUB_STRING,此子字符串由字符串STRING的LEN个字符组成 |
substring_between(N1,N2,STRING) | 字符串 | 返回STRING的子字符串,该字符串从下标N1开始并结束于下标N2 |
trim(STRING) | 字符串 | 除去指定字符串的前导和尾部空格 |
trim_start(STRING) | 字符串 | 除去指定字符串的前导空格 |
trimend(STRING) | 字符串 | 除去指定字符串的尾部空格 |
unicode_char(NUM) | CHAR | 返回Unicode值为NUM的字符 |
unicode_value(CHAR) | NUM | 返回CHAR的Unicode值 |
uppertolower(CHAR)
uppertolower(STRING) |
CHAR或String | 可以输入字符串或字符,此函数将返回一个类型相同项,大写字符将转换为相应的小写字符。注意:指定字符串时一定要用英文双引号,而指定字符时一定要用反向单引号。简单字段名不必使用引号 |
- 日期和时间函数
MODELER包含一系列处理含有字符串日期时间存储变量的字段函数,这些字符串变量代表日期和时间。可在“流属性”对话框中指定具体到每个流的日期和时间格式。日期和时间函数根据当前选定的格式来解析日期和时间字符串。如果用两位数指定日期中的年(即未指定世纪),则Modeler将采用“流属性”对话框中所指定的默认世纪,注意:不能从脚本中调用日期和时间函数。日期和时间函数的主要功能如下。
功能 | 结果 | 说明 |
@TODAY | 字符串 | 如果在“流属性”对话框中选择翻转日/分钟,该函数将返回采用当前日期格式的当前日期字符串。如果采用两位数的日期格式且未选择翻转日/分钟,该函数将在当前服务器上返回$null$。注意:此功能无法通过脚本调用 |
date_before(DATE1,DATE2) | 布尔值 | 如果DATE1所表示的日期在DATE2之前,则返回真值。除此以外,此函数的返回结果为0 |
date_days_difference(DATE1,DATE2) | 整数 | 以整数的形式返回从日期DATE1到日期DATE2的天数。如果DATE2在DATE1之前,则该函数返回负值 |
date_in_days(DATE) | 整数 | 以整数的形式返回从基线日期到日期DATE的天数。如果DATE在基线日期之前,则该函数返回负数。为了计算正常进行,必须包含有效日期。例如,不能将2001年2月29日指定为日期。因为2001年并非闰年,所以上述日期不存在 |
date_in_months(DATE) | 实数 | 以实数的形式返回从基线日期到日期DATE的年数。这是基于每月30.0天的近似数字。如果DATE在基线日期之前,则该函数返回负数 |
date_in_weeks(DATE) | 实数 | 以实数的形式返回从基线日期到日期DATE的年数。这基于每周7天。如果DATE在基线日期之前,则该函数返回负数 |
date_in_years(DATE) | 实数 | 以实数的形式返回从基线日期到日期DATE的年数。这是基于每年365天的近似数字。如果DATE在基线日期之前,则该函数返回负数 |
date_months_difference(DATE1,DATE2) | 实数 | 以实数的形式返回从DATE1到DATE2的月数。这是基于每月30天的近似数字。如果DATE2在DATE1之前,则该函数返回负值 |
datetime_date(YEAR,MONTH,DAY) | 日期 | 创建给定YEAR、MONTH、DAY的日期值,参数必须为整数 |
datetime_date(ITEM) | 日期 | 返回给定ITEM(可以是字符串、数值、日期或时间戳)的日期值。函数datetime_date(STRING)将通过解析采用当前日期格式的字符串来创建日期。只有“流属性”对话框中指定的日期格式正确,此函数方能成功执行。函数datetime_date(NUMBER)将根据数值(自基线日期或纪元以来的秒数)创建日期。不足一天的部分将被截断。而函数datetime_date(DATE)和datetime_date(TIMESTAMP)将返回未更改的日期或时间戳的日期部分 |
datetime_day(DATE) | 整数 | 对给定的DATE或时间戳,返回其所在月份的天数据。返回结果是范围为1~31的整数 |
datetime_day_name(DAY) | 字符串 | 返回给定DAY的全称。参数必须是1(周日)~7(周六)之间的整数 |
datetime_hour(TIME) | 整数 | 返回TIME或时间戳的小时数,返回结果是从0~23之间的整数 |
datetime_in_seconds
(DATETIME) |
实数 | 返回日期时间DATETIME中的秒数 |
datetime_minute(TIME) | 整数 | 返回来自TIME或时间戳的分钟数。返回结果是范围为0~59的整数 |
datetime_month(DATE) | 整数 | 返回来自DATE或时间戳的月数。返回结果是范围为1~12的整数 |
datetime_month_name(MONTH) | 字符串 | 返回给定MONTH的全称,参数必须是1~12之间的整数 |
datetime_now | 时间戳 | 以时间戳形式返回当前时间 |
datetime_second(TIME) | 整数 | 返回来自TIME或时间戳的秒数。返回结果是从0~59之间的整数 |
datetime_day_short_
name(DAY) |
字符串 | 返回给定DAY的缩写。参数必须是1(周日)~7(周六)之间的整数 |
datetime_month_short_
name(MONTH) |
字符串 | 返回给定MONTH的缩写。参数必须是1~12之间的整数 |
datetime_time(HOUR,MINUTE,SECOND) | 时间 | 返回指定HOUR、MINUTE和SECOND的时间值。参数必须为整数 |
datetime_time(ITEM) | 时间 | 返回给定ITEM的时间值 |
datetime_timestamp(YEAR,
MONTH,DAY,HOUR,MINUTE, SECOND) |
时间戳 | 返回指定YEAR、MONTH、DAY、HOUR、MINUTE以及SECOND的时间戳值 |
datetime_timestamp(DATE,
TIME) |
时间戳 | 返回给定DATE和TIME的时间戳值 |
datetime_timestamp(NUMBER) | 时间戳 | 返回给定秒数的时间戳值 |
datetime_weekday(DATE) | 整数 | 对给定DATE或时间戳,返回其所在周的天数据 |
datetime_year(DATE) | 整数 | 返回来自DATE或时间戳的年,返回结果为整数,如2002 |
date_weeks_difference(DATE1,DATE2) | 实数 | 以实数的形式返回从日期DATE1至日期DATE2的周数(基于每周7天)。如果DATE2在DATE1之前,则该函数返回负值 |
date_years_difference
(DATE1,DATE2) |
实数 | 以实数的形式返回从日期DATE1至日期DATE2的年数。这是基于每年365天的近似数字。如果DATE2在DATE1之前,则该函数返回负值 |
time_before(TIME1,TIME2) | 布尔值 | 如果TIME1表示的时间早于TIME2表示的时间,则返回真值。除此以外,此函数的返回结果为0 |
time_hours_difference(TIME1,TIME2) | 实数 | 以实数的形式返回时间TIME1和TIME2之间的时间差。如果在“流属性”对话框中选择翻转日/分钟,则用TIME1的较大值表示前一天。如果不选择翻转日选项,则较大的TIME1值将造成返回值为负数 |
time_in_hours(TIME) | 实数 | 以实数的形式返回TIME所表示的小时数。例如,采用时间格式HHMM时,表达式time_in_hours(‘0130’)的返回值为1.5 |
time_in_mins(TIME) | 实数 | 以实数的形式返回TIME所表示的分钟数 |
time_in_secs(TIME) | 整数 | 以实数的形式返回TIME所表示的秒数 |
time_mins_difference(TIME1,TIME2) | 实数 | 以实数的形式返回时间TIME1和TIME2之间的时间差。如果在“流选项”对话框中选择翻转日/分钟,则将采用TIME1的较大值来指代前一天(仅在当前格式中指定分和秒时,指代前一小时)。如果不选择翻转日选项,TIME1的较大值会造成返回值为负数 |
time_secs_difference(TIME1,TIME2) | 整数 | 以整数的形式返回时间TIME1和TIME2之间的秒数差。如果在“流选项”对话框中选择翻转日/分钟,则将采用TIME1的较大值来指代前一天(仅在当前格式中指定分和秒时,指代前一小时)。如果不选择翻转日选项,则较大的TIME1值将造成返回值为负数 |
- 序列函数
对于某些操作而言,事件序列很重要。Modeler应用程序可使您处理以下记录序列:序列和时间序列、序列函数、记录索引、求值的平均数、总和以及对值进行比较等。对于许多应用程序,每个通过流传递的记录可以看成是独立于所有其他记录的单个案例。此种情况下,记录的顺序通常并不重要。
然而对于某些类别的问题,记录序列非常重要。这些一般是发生在时间序列中的情况,其中记录序列代表事件的有序排列。每条记录代表着时间中的某个特定时刻的快照,大部分最重要的信息可能并未包含在瞬时值中,而是包含在随时间的流逝、不断变更发展的方式中。
通过以下特征可以立即识别出序列和特殊函数:这些函数的前缀均为“@”;函数名称采用大写。序列函数可以引用节点当前处理的记录、已通过节点的记录,甚至是尚未通过节点的记录。序列函数可与其他MODELER表达式组件自由组合,虽然某些函数对参数有所限制。
例如:您会发现了解自某一特定事件发生或条件为真以来的时间长度非常有用。使用函数@SINCE可实现上述目的,例如:@SINCE(Income>Outgoings)函数返回最后一条满足此条件记录的偏移量,即在此记录之前满足条件的记录数。如果条件从不为真,则@SINCE返回@INDEX+1。
有时您可能需要在@SINCE所用的表达式中引用当前记录的值,此时可以使用函数@THIS指定一个始终应用于当前记录的字段名。若要找出最后一条满足Concentration字段值是当前记录两倍的记录的偏移量,可使用表达式:@SINCE(Concentration>2*@THIS(Concentration)),有时,当前记录的@SINCE函数的定义条件为真,例如:@SINCE(ID==@THIS(ID)),基于这种原因,@SINCE函数将不对当前记录的条件求值。如果要对当前记录以及前面记录的条件求值,请使用类似函数@SINCE0;如果当前记录的条件为真,则@SINCE0返回值为0。注意:不得从脚本调用@函数。序列函数的主要功能如下。
功能 | 结果 | 说明 |
MEAN(FIELD) | 实数 | 返回指定的FIELD或FIELDS值的平均值 |
@MEAN(FIELD,EXPR) | 实数 | 返回FIELD值的平均值,这些字段来自当前节点所接收的最后EXPR个记录(包括当前记录)。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前已接收的记录数,则返回目前为止接收到的所有记录数的平均值。注意:此功能无法通过脚本调用 |
@MEAN(FIELD,EXPR,INT) | 实数 | 返回FIELD值的平均值,这些字段来自当前节点所接收的最后EXPR个记录(包括当前记录)。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前已接收的记录数,则返回目前为止接收到的所有记录数的平均值。INT指定要向后查看的值的最大数量。这比使用两个参数更为有效 |
@DIFF1(FIELD) | 实数 | 返回FIELD1的一阶微分差,因此单参数形式将返回该字段当前值和前一个值的差。如果之前的相关记录不存在,则返回0 |
@DIFF1(FIELD1,FIELD2) | 实数 | 两参数形式给出了FIELD1对FIELD2的一阶微分差。如果之前的相关记录不存在,26则返回0。 |
@DIFF2(FIELD) | 实数 | 返回FIELD1的二阶微分差。因此单参数形式将返回该字段当前值和前一个值的差。如果之前的相关记录不存在,则返回0。 |
@DIFF2(FIELD1,FIELD2) | 实数 | 两参数形式给出了FIELD1对FIELD2的一阶微分差。如果之前的相关记录不存在,则返回0 |
@INDEX | 整数 | 返回当前记录的索引。当记录到达当前节点时,将为其分配索引。为第一条记录分配索引1,每条后续记录的索引以1递增 |
@LAST_NON_BLANK(FIELD) | Any | 根据上游源或类型节点中的定义,返回为非空值的FIELD的前一个值。如果目前所读取的FIELD中没有非空值,则返回$null$。注意,可以为每个字段单独定义空值(又称用户默认值) |
@MAX(FIELD) | 数值 | 返回指定FIELD的最大值 |
@MAX(FIELD,EXPR) | 数值 | 返回目前为止所接收的最后EXPR条记录的FIELD字段(包括当前字段)的最大值。FIELD必须是数值型字段的名称。EXPR可以是值为大于0的整数的任意表达式 |
@MAX(FIELD,EXPR,INT) | 数值 | 返回目前为止所接收的最后EXPR条记录的FIELD字段(包括当前字段)的最大值。FIELD必须是数值型字段的名称。EXPR是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前已接收的记录数,则返回目前为止接收到的所有记录数的最大值。INT指定要向后查看的值的最大数量。这比使用两个参数更为有效 |
@MIN(FIELD) | 数值 | 返回指定FIELD的最小值 |
@MIN(FIELD,EXPR) | 数值 | 返回目前为止所接收的最后EXPR条记录的FIELD字段(包括当前字段)的最小值。FIELD必须是数值型字段的名称。EXPR可以是值为大于0的整数的任意表达式 |
@MIN(FIELD,EXPR,INT) | 数值 | 返回目前为止所接收的最后EXPR条记录的FIELD字段(包括当前字段)的最小值。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前已接收的记录数,则返回目前为止接收到的所有记录数的最小值。INT指定要向后查看的值的最大数量,这比使用两个参数更为有效 |
@OFFSET(FIELD,EXPR) | Any | 检索前一条或下一条记录中给定字段的值。返回与当前记录之间偏移量值为EXPR的记录中名为FIELD的字段的值。如果EXPR为(字符)整数,则其可能有正负之分;正偏移是指某条记录已经传递,而负偏移则为某条尚未到达的记录指定了“期待”。例如,@OFFSET(Status,1)返回前一条记录中Status字段的值,而@OFFSET(Status,-4)“超前查看”序列的4条记录(即未通过节点传递的记录),以获取字段值。EXPR依旧可以是任意的MODELER表达式,将通过此表达式给出用于当前记录的偏移值。此时建议在该函数中采用三种参数以提高性能。如果表达式返回的不是非负整数,将产生错误,即计算的期待偏移量不合法 |
@OFFSET(FIELD,EXPR,
INT) |
Any | 与@OFFSET函数执行相同的操作,但附带第三个参数INT(用于指定向后查看值的最大数量)。当从表达式计算偏移时,建议采用第3个参数来提高性能。例如,通过表达式@OFFSET(Foo,Month,12),系统将知道仅保留Foo的最后12个值,否则,系统将存储所有满足条件的值。对于固定偏移量(包括必须固定的负“期待”偏移量),第3个参数将变得毫无意义,建议使用该函数的双参数版本 |
@SDEV(FIELD) | 实数 | 返回指定的FIELD或FIELDS值的标准差 |
@SDEV(FIELD,EXPR) | 实数 | 返回当前节点所接收的最后EXPR个记录(包括当前记录)的FIELD值的标准偏差。FIELD必须是数值型字段的名称。EXPR可以是值为大于0的整数的任意表达式。如果EXPR被忽略或者超出了目前为止所接收到的记录数,则返回目前为止接收到的所有记录的标准差 |
@SDEV(FIELD,EXPR,INT) | 实数 | 返回当前节点所接收的最后EXPR个记录(包括当前记录)的FIELD值的标准偏差。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前所接收的记录数,则返回目前为止接收到的所有记录数的标准差。INT指定要向后查看的值的最大数量。这比使用两个参数更为有效 |
@SINCE(EXPR) | Any | 如果EXPR(可以是任何的MODELER表达式)的结果为真,则返回已传递的记录数 |
@SINCE(EXPR,INT) | Any | 添加第2个参数(INT)时,用于指定向后查看的最大记录数。如果EXPR结果不为真,则INT为@INDEX+1 |
@SINCE0(EXPR) | Any | 对于当前记录,@SINCE不返回任何值;而如果当前记录的EXPR结果为真,则@SINCE0返回0 |
@SINCE0(EXPR,INT) | Any | 添加第2个参数(INT)时,用于指定向后查看的最大记录数 |
@SUM(FIELD) | 数值 | 返回指定字段FIELD或FIELDS的值的和 |
@SUM(FIELD,EXPR) | 数值 | 返回当前节点所接收的最后EXPR个记录(包括当前记录)的FIELD值的总和。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数表达式。如果EXPR被忽略或超出了目前所接收的记录数,则返回目前为止接收到的所有记录数的和 |
@SUM(FIELD,EXPR,INT) | 数值 | 返回当前节点所接收的最后EXPR个记录(包括当前记录)的FIELD值的总和。FIELD必须是数值型字段的名称。EXPR可以是任何值为大于0的整数的表达式。如果EXPR被忽略或超出了目前所接收的记录数,则返回目前为止接收到的所有记录数的和。INT指定要向后查看的值的最大数量。这比使用两个参数更为有效 |
@THIS(FIELD) | Any | 返回字段当前记录中字段名为FIELD的值,仅用于@SINCE表达式 |
- 全局函数
函数@MEAN、@SUM、@MIN、@MAX和@SDEV用于处理所有已读取的记录(包括当前记录)。但在某些时候,它可用于检测如何将当前记录中的值与整个数据集中的值进行比较。如果使用设置全局量节点来生成整个数据集中的值,则您可在使用全局函数的MODELER表达式中访问这些值。例如:@GLOBAL_MAX(Age)返回数据集中的最大Age值,同时表达式(Value-@GLOBAL_MEAN(Value))/@GLOBAL_SDEV(Value)将给出该记录Value和作为标准偏差的全局平均数之间的差,仅当设置全局量节点并计算出全局值后,方可使用它们。通过单击“流属性”对话框中“全局量”选项中的ClearGlobalValues按钮,您可以撤消当前所有全局值。注意:不得从脚本调用@函数。全局函数的主要功能如下。
功能 | 结果 | 说明 |
@GLOBAL_MAX(FIELD) | 数值 | 返回整个数据集(先前由设置全局量节点生成)的FIELD的最大值。FIELD必须是数值型字段的名称。如果未设置相应的全局值,则将出现错误。注意:此功能无法通过脚本调用 |
@GLOBAL_MIN(FIELD) | 数值 | 返回整个数据集(先前由设置全局量节点生成)的FIELD的最小值。FIELD必须是数值型字段的名称。如果未设置相应的全局值,则将出现错误 |
@GLOBAL_SDEV(FIELD) | 数值 | 返回整个数据集(先前由设置全局量节点生成)的FIELD值的标准差。FIELD必须是数值型字段的名称。如果未设置相应的全局值,则将出现错误 |
@GLOBAL_MEAN(FIELD) | 数值 | 返回整个数据集(先前由设置全局量节点生成)的字段FIELD的平均值。FIELD必须是数值型字段的名称。如果未设置相应的全局值,则将出现错误 |
@GLOBAL_SUM(FIELD) | 数值 |
返回整个数据集(先前由设置全局量节点生成)的字段FIELD的总和。FIELD必须是数值型字段的
名称。如果未设置相应的全局值,则将出现错误 |
- 空值和Null值处理函数
借助于MODELER,您可以指定在某个字段中用作“空白”或缺失值的特定值。下列函数可用于处理空值。注意:不得从脚本调用@函数。
功能 | 结果 | 说明 |
@BLANK(FIELD) | 布尔值 | 根据上游类型节点或源节点(“类型”选项)中所设置的空值处理规则,对所有空值的记录返回真值。注意:此功能无法通过脚本调用 |
@LAST_NON_BLANK(FIELD) | Any | 根据上游源或类型节点中的定义,返回为非空值的FIELD的前一个值。如果目前所读取的FIELD中没有非空值,则返回$null$ |
@NULL(FIELD) | 布尔值 | 如果FIELD的值为系统缺失值$null$,则返回真值。如果字段值为其他值(包括用户定义空值),则返回假值。如果想同时检查空值和Null值,则请使用@BLANK(FIELD)和@NULL(FIELD) |
undef | Any | 在MODELER中一般用于输入$null$值,例如,在过滤节点中用Null值替代空值 |
在过滤节点中可以“填写”空值字段。在过滤和导出节点(仅多种模式)中,特殊的MODELER函数@FIELD将指向正在检查的当前字段。
- 特殊函数
特殊函数用于指示所检查的具体字段,或用于生成输入字段列表。例如,当一次导出多个字段时,应使用@FIELD函数来指示“对选定字段执行导出操作”。使用表达式log(@FIELD)来为每个选定字段导出一个新的日志字段。注意:不得从脚本调用@函数。
功能 | 结果 | 说明 |
@FIELD | Any | 对表达式中指定的所有字段执行操作。注意:此功能无法通过脚本调用 |
@TARGET | Any | 当MODELER表达式用于用户定义的分析函数时,@TARGET代表目标字段或正在分析的目标/预测对的“正确值”。此函数一般用于分析节点 |
@PREDICTED | Any | 当MODELER表达式用于用户定义的分析函数时,@PREDICTED代表正在分析的目标/预测对的预测值。此函数一般用于分析节点 |
@PARTITION_FIELD | Any | 替换当前分区字段的名称 |
@TRAINING_PARTITION | Any | 返回当前训练分区的值。例如,要用选择节点选择训练记录,请使用MODELER表达式:@PARTITION_FIELD =@TRAINING_PARTITION,此表达式将确保无论数据中的每个分区使用哪个值表示,选择节点都将照常工作 |
@TESTING_PARTITION | Any | 返回当前测试分区的值 |
@VALIDATION_PARTITION | Any | 返回当前验证分区的值 |
@FIELDS_BETWEEN(start,end) | Any | 根据数据中字段的自然(即插入)顺序,返回指定开始和结束字段(包含)之间的字段名列表 |
@FIELDS_MATCHING(pattern) | Any | 返回与指定模式相匹配的字段名的列表。问号(?)可以包含在模式中以便匹配某一字符,星号(*)可以匹配零个或多个字符。若要匹配文字问号或星号(而不是将其用作通配符),可以使用反斜杠(\)作为转义符号 |
SPSS-Modeler常用函数简介
时间:2019-09-10 23:26 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
相关推荐:
网友评论: