1.作者:bolow (cnjm)。转摘请标明出处
2.本文大部分内容为笔者在业余时间根据SPSS的官方文档整理出来,
* 按语法内容分成若干章节,大多数为语法元素的示意,讲解不多,
* 阅读时可能要求您有其他语言的编程经验
3.您在使用Clementine或者Clem Scripts时候遇到问题请不要给我发邮件,
* 我现在正在为生计奔波,可能没有足够的时间帮您处理问题,
* 遇到问题还请您自己多按F1了。
* (请见谅)如果您能给我提供工作机会的话请发信到ibolow(at)gmail.com
*/
一 变量与类型
1 域(field)的名称以及变量名以字母开头,可以包含字母、数字以及下划线。
如果命名不遵循以上原则,名称需要用单引号包括
2 数据类型使用样式
字符串 --"c1", "Type 2", "a piece of free text"
整数 --12, 0, –189
实数 --12.34, 0.0, –0.0045
日期时间 --05/12/2002, 12/05/2002, 12/05/02
字符 --`a` 或者 3
列表 --[1 2 3], [’Type 1’ ’Type 2’]
3 引号使用规则
字符串 --最好使用双引号。虽然单引号也能用,但是有时候会和域名混淆
字符 --使用后引号`(ESC键下面的那个)
也可以使用数字
也可以使用字符串中的索引 比如lowertoupper("druga"(5)) —> "A"
域名 --通常是不用加引号的,但是如果包含了空格等特殊字符就要加上双引号
如果给没有定义的域名加上引号,可能会被认为是字符串
参数名 --必须使用单引号
二 语法
1 运算符优先顺序
函数参数
函数调用
xx
x / mod div rem
+ -
> < >= <= /== == = /=
2 结构控制
a if..then..else
if EXPR then STATEMENTS 1
else STATEMENTS 2
endif
举例
if ^param = 24 then
create derivenode
else exit 2
endif
b for循环
× for PARAMETER in LIST
STATEMENTS
endfor
× for PARAMETER from N to M
STATEMENTS
endfor
× for PARAMETER in_models
STATEMENTS
endfor
对生成模型面板上的模型进行枚举操作,模型的名字被传到PARAMETER变量中
× for PARAMETER in_fields_at NODE
STATEMENTS
endfor
对node节点下游(downstream)节点的每个字段进行操作
× for PARAMETER in_fields_to NODE
STATEMENTS
endfor
对node节点下游(upstream)节点的每个字段进行操作
× exit
for PARAMETER in_streams
STATEMENTS
endfor
对当前打开的流进行枚举操作
3 赋值示意
×set :balancenode.directives = [{1.3 "Age > 60"}]
set :fillernode.condition = "(Age > 60) and (BP = \"High\")"
set :derivenode.formula_expr = "substring(5, 1, Drug)"
set Flag:derivenode.flag_expr = "Drug = X"
set :selectnode.condition = "Age >= ’$P-cutoff’"
set :derivenode.formula_expr = "Age - GLOBAL_MEAN(Age)"
set nodename.tablename="mytable"
set: databasenode.table="atablename"
set my_node = get node :plotnode
set :samplenode {
max_size = 200
mode = "Include"
sample_type = "First"
}
set :balancenode.directives = [{1.3 "Age > 60"}]
set :fillernode.condition = "(Age > 60) and (BP = \"High\")"
set :derivenode.formula_expr = "substring(5, 1, Drug)"
set Flag:derivenode.flag_expr = "Drug = X"
set :selectnode.condition = "Age >= ’$P-cutoff’"
set :derivenode.formula_expr = "Age - GLOBAL_MEAN(Age)"
完整的表达形式应该是 set nodename:NODETYPE.prop=value
在独立脚本中引用节点要加^
× 设置超节点参数
set mySuperNode.parameters.minvalue = 30
set :process_supernode.parameters.minvalue = 30
set :process_supernode.parameters.minvalue = "<expression>"
set mySuperNode:process_supernode.parameters.minvalue = 30
set mySuperNode.parameters.’Data_subset:samplenode.rand_pct’ = 50
set :source_supernode.parameters.’Data_subset:samplenode.rand_pct’= 50
在定义一个超节点的参数的时候,必须使用短名
4 设置一个图标的位置
position nodename at 450 50
5 执行某个节点
execute :exe_node_name
6 新建一个节点和流
×创建节点
var x
set x = create typenode
rename ^x as "mytypenode"
position ^x at 200 200
var y
set y = create varfilenode
rename ^y as "mydatasource"
position ^y at 100 200
connect ^y to ^x
set node = create typenode
rename ^node as "mytypenode"
position ^node at 200 200
set node = create varfilenode
rename ^node as "mydatasource"
position ^node at 100 200
connect mydatasource to mytypenode
×创建流
create STREAM DEFAULT_FILENAME
7 访问数据结果
×value RESULT at ROW COLUMN
×set num_rows = :tablenode.output.row_count
×set table_data = :tablenode.output
set last_value = value table_data at num_rows num_cols
8 文件操作
× 打开文件
open MODE FILENAME
MODE create/append
× 关闭文件
close FILE
× 举例
set file = open create ’C:/Data/script.out’
for I from 1 to 3
write file ’Stream ’ >< I
endfor
close file
9 连接节点
create tablenode
create variablefilenode
connect :variablefilenode to :tablenode
set :variablefilenode.full_filename = "C:\Program Files\Clementine\8.1\demos\DRUG1n"
execute ’Table’
set param = value :tablenode.output at 1 1
if ^param = 24 then
create derivenode
else exit 2
endif
责编:bolow (cnjm)
微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友