可以在公式中包括条件表达式(简称为条件)。使用这些表达式,您可以生成一系列与结果表达式配对的子句。构造一系列子句可以让您根据条件将值赋给计算列中的单元格。条件遵循以下规则:
注意:InterpolateStepForWhile 最常与其他命令一起使用来生成 JSL 脚本。您可以使用“公式编辑器”在该列中创建和执行脚本,但不推荐这样做,因为这会导致相关性问题并造成混淆。通常将脚本存储为 .jsl 文件,可以作为表属性与数据表一起保存。有关表属性的详细信息,请参见“=入门”一章中第 32 页的“表面板”。有关脚本命令的文档,请参见《JSL 语法参考》。
显示包含缺失表达式和缺失 then 子句的单个 If 条件。突出显示 exprthen 子句,然后输入值。例如,要计算合计不为 0 时计数占合计的百分比,请输入图 A.3中的条件表达式(使用名为计数合计的列)。
图 A.3 条件表达式
要向 If 条件中添加新条件,请突出显示 then 子句,然后点击“公式编辑器”小键盘上的插入按钮 ()。初始时它将现有 else 条件更改为 expr 子句。再次点击插入按钮可添加 else 子句。突出显示 thenelse 并重复点击插入按钮可将 else 更改为 expr 或添加新的 expr 子句。
要删除子句,请选择它上面的 then 子句,然后按您键盘上的删除键或点击“公式编辑器”小键盘上的删除按钮 ()。
在“公式编辑器”中选择 Match 后,将显示一个列表和两个选项:
选择根据数据添加匹配参数,将自动添加与您数据中所有水平对应的子句。或者,按住 Shift 键,选择条件,然后选择 Match。在图 A.4中,左边的示例显示自动添加的子句。
选择请不要添加,以便您可以单独添加每个子句。在图 A.4中,右边的示例显示一个空子句,您可以使用缺失表达式填充它。
图 A.4 使用 Match 函数的示例
在自动填充的参数中,您应突出显示 then 子句,然后输入表达式。在空参数中,您突出显示 exprvaluethen 子句,然后输入表达式。(或者,若您突出显示一个表达式,然后点击 Match,则“公式编辑器”创建新的 Match 条件,其中原始突出显示的表达式作为 expr 且不为 valueelse 子句赋值。)另外,请记住:
Match 与等效的 If 相比,求值速度更快,占用的内存更少,因为对于数据表中的每行仅对变量求一次值。而 If 条件遇到每行的每个 If 子句时都必须对变量求值,直到子句求值结果为真。有关 MatchIf 条件的比较,请参见比较函数
使用 If Match,“公式编辑器”从序列顶部向下搜索第一个真子句,并对相应的结果表达式求值。后续真子句将忽略。
在以下示例中,根据年龄变量的值来赋每个值。
图 A.5 使用 Match 函数的示例
注意:Match 忽略尾部空格而 If 不忽略。
尽管 Match 对于任意缺失值返回“缺失”,您也可以专门匹配缺失值。
ChooseMatch 的特殊形式,其中条件的参数为从 1 开始的一系列整数。子句的值替换匹配条件。图 A.6中显示了 Choose 条件的示例。使用 Choose,“公式编辑器”直接转到正确的选择子句并对结果表达式求值。
图 A.6 Choose 条件的示例
突出显示一个表达式并点击 Choose 时,“公式编辑器”创建包含一个子句的新条件表达式。使用小键盘上的插入 () 和删除 () 按钮可添加新子句或删除不想要的子句,如前面 If 条件中所述。
Choose choose 表达式求值并立即转到相应的结果表达式以生成返回值。使用 Choose,您只提供一次生成从 1 开始的一系列整数的选择表达式,然后对序列中的每个整数给出选择。
两个参数均为真时求值结果为 1。否则,求值结果为 0。(请参见图 A.9。)仅当两个比较结果都为真时,图 A.7中的公式将“组 1”标记为驾驶员。
图 A.7 创建 And 函数
任一参数为真时求值结果为 1。若两个参数均为假,则 Or 表达式的求值结果为 0。(请参见图 A.9。)图 A.8中的公式将所有大于 13 岁的男性参与者分配给“组 1”。
图 A.8 创建 Or 函数
图 A.9中左边的真值表显示当两个参数具有求值结果为真或假的非缺失值时 And ( & ) 和 Or (| ) 函数的结果。右边的表显示左边或右边的表达式(称它们为 ab)或两者具有缺失值时的结果。
图 A.9 AndOr 表达式的求值
参数为假时求值结果为 1。否则,Not 的求值结果为 0。应用 Not 函数时,请根据需要使用括号以避免歧义。例如,!(weight==64) 可以为真或假(1 或 0),但是 (!weight)==64 始终为假 (0),因为 Not 只能返回 0 或 1。诸如 !(weight==64) 的表达式还可以输入为 weight != 64
在与您指定的参数对应的两个点 (x1, y1) 和 (x2, y2) 之间线性插入 y 值。可以使用插入键插入更多对 x, y 参数。Interpolate 查找与 x 值对应的 x, y 值对(点)并完成插值。
图 A.10 Interpolate 示例
Step 与 Interpolate 类似,不同的是它返回与最大 x 值对应的 y 值,它们分别小于等于 xy 参数。即它从 step 函数而非两个点之间的线性拟合查找对应指定 xy。与 Interpolate 类似,您可以具有所需的任意多对 xy 参数。
图 A.11 Step 示例
while 条件为真,则重复 body 参数中的语句。initnext 控制迭代。
重复检验 expr 条件并执行 body,直到 expr 不再为真。
Break 完全停止执行循环,而继续执行循环后面的语句。Continue 结束循环的当前迭代并在下一迭代开始循环。
均用于 ForWhileFor Each Row 循环中。