如何使用“条件语句”选择数据行然后执行,例如简单的 Col A - Col C需要一些帮助!
我想从 3 或 4 列中选择数据行(基于 CONDITIONAL 语句,然后执行相当简单的公式,例如,如果在选择正确的行时满足条件
如果(
:年 == 2020 , : 裁剪 |玉米|大豆,
:类型 ==如果, :"平均值(YIELD(BU/A)_OR, 13)"n - :"平均值(YIELD(BU/A)_OR, 8)"n,
:ELSE == :EMPTY (如果可能的话,我更喜欢不使用 ELSE 语句......只是希望满足上述条件语句以确切知道通过公式在新列中添加了什么)
或者,
如果(
:年 == 2020 , : 裁剪 |玉米|大豆,
:类型 ==叶面, :"平均值(YIELD(BU/A)_OR, 4)"n - :"平均值(YIELD(BU/A)_OR, 1)"n,
或者,
如果(
:年 == 2021 , : 裁剪 |玉米|大豆,
:类型 ==如果, :"平均值(YIELD(BU/A)_OR, 6)"n - :"平均值(YIELD(BU/A)_OR, 2)"n
或者,
如果(
:年 == 2021 , : 裁剪 |玉米|大豆,
:类型 ==叶面, :"平均值(YIELD(BU/A)_OR, 3)"n - :"平均值(YIELD(BU/A)_OR, 1)"n
)
脚本回复:如何使用“条件语句”选择数据行然后执行,例如简单的 Col A - Col C我无法解释您的伪代码。
我假设您有一个名为 YEAR 的数字列,并且您正在检查它是否具有值 2020
你有一个名为:
作物 |玉米 |大豆
或者您是否希望名为 CROP 的列的值为 Corn 或 Soybean
看来您有一个名为 TYPE 的列,并且您正在检查它是否具有“IF”的值?
如果该值等于“IF”,那么您想要找到名为 Mean(YIELD(BU/A)_OR, 13) 的列和名为 Mean(YIELD(BU/A)_OR, 8) 的列之间的差异
或者你想计算列 YIELD 的平均值
最后,您引用了一个名为 ELSE 的列并确定是否等于一个名为 EMPTY 的列。
我确信这不是你想要的。
你能提供一个数据表是什么的样本,然后用文字描述你想要什么。
我还建议您花时间阅读脚本指南。它位于 JMP 文档库的“帮助”下拉菜单下。
回复:如何使用“条件语句”选择数据行然后执行,例如简单的 Col A - Col C嗨,吉姆,感谢您的回复,感谢您提供的任何帮助,并对您的困惑感到抱歉 - 我将尝试澄清和简化我想要的公式类型。
我有一个名为 YEAR 的列,值是 2020 或 2021。
我还有一个名为 CROP 的列,值是玉米或大豆。
我有另一个名为 TYPE 的列,值是 Foliar 或 IF (即,在犁沟内)
我还有另外 10 列代表治疗 1 到 10 的平均产量(TRT1、TRT2、......、TRT10)。
我想要一个公式来计算每种治疗(不同产品剂量率)与对照治疗(0 率)的附加值。这是踢球者,治疗数量(代表剂量率 0、1、4、8、16、32、64 FL OZ/英亩)在 2 年之间以及 CROP 和 TYPE 之间有所不同。例如,2020 年玉米和大豆“IF”的 16 FL OZ/英亩产品剂量率为 TRT5,即代表犁沟试验,并且在 2021 年玉米和大豆“叶面”试验中为 TRT3。
所以我有 YEAR (2) x CROP (2) x TYPE (2) 的 8 种可能组合,我想要1个公式填写给定产品剂量率与对照处理(0 率)的 bu./acre 变化值......因此,例如,我创建了一个名为“16FLOZ_AddedValue”的新列并希望公式执行:
如果YEAR = 2020, CROP=Corn, TYPE=Foliar,公式需要返回“TRT3”的值减“TRT1”栏;然而,
如果YEAR = 2020, CROP=Corn, TYPE=IF(即在犁沟内),公式需要返回值“TRT5”减同一列中名为“16FLOZ_AddedValue”的列“TRT1”;然而,
如果YEAR = 2021, CROP=Corn, TYPE=Foliar,公式需要返回值“TRT4”减在名为“16FLOZ_AddedValue”的同一列中的列“TRT1”;
等等(对不起,我不知道如何在 1 个公式中将“IF”串在一起)。
关于 ELSE 评论,这与我希望在不满足“IF”组合时不让公式执行任何类型的隐藏操作步骤有关。换句话说,例如,如果YEAR=2020,CROP=Corn,TYPE=Foliar,那么只计算TRT3-TRT1并省略任何ELSE类型的动作,即保持所有剩余单元格值不变;并移动到下一个组合 IF 语句,这些语句可能会指示公式采用 TRT5-TRT1 等。
回复:如何使用“条件语句”选择数据行然后执行,例如简单的 Col A - Col C非常感谢:SAS 技术支持的 Sarah Seligman 为我的问题提供了解决方案。下面是她电子邮件中的剪切/粘贴,但格式丢失了,因此我附上了她的 X.jmp 数据文件和她的答案的 pdf,其中可能更容易在公式中查看 JSL 格式。再次感谢 Sarah 和 Jim,感谢他们最初回答了我的 JSL 问题。
___
嗨,杰夫,感谢您的耐心等待。 我附上了一个数据表,其中包含一个公式,我相信你所描述的。 关于您提出的问题的一部分:“是否可以以省略 ELSE 操作的方式构造 IF 语句?” 简单的答案是肯定的——您只需将条件 IF 语句的“Else”部分留空。 因此,使用一个 IF 语句,它在公式编辑器中看起来像这样: 在 JSL 中,即: If(:YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar", :TRT 03 - :TRT 01 ) 使用两个 IF 语句,它看起来像这样: 在 JSL 中,即: If( :YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar ", :TRT 03 - :TRT 01, :YEAR == "2020" & :CROP == "Corn" & :TYPE == "IF", :TRT 05 - :TRT 01 ) 如果您使用的是公式编辑器而不是与 JSL 相比,您可以通过单击插入符号图标插入新的 IF 条件。 在下面的屏幕截图中,我单击了三次以添加另外三个 If 表达式字段。 回到您描述的目标:我创建一个名为“16FLOZ_AddedValue”的新列,并希望公式执行:如果 YEAR = 2020,CROP=Corn,TYPE=Foliar,公式需要返回“TRT3”减去列的值“ TRT1";但是,如果 YEAR = 2020, CROP=Corn, TYPE=IF(即在犁沟内),则公式需要返回“TRT5”减去“16FLOZ_AddedValue”同一列中的“TRT1”列的值;但是,如果 YEAR = 2021,CROP=Corn,TYPE=Foliar,则公式需要在名为“16FLOZ_AddedValue”的同一列中返回“TRT4”减去列“TRT1”的值;下面是基于此的新列 16FLOZ_AddedValue 的公式描述。 在附加的数据表中,您可以单击列面板中列名称旁边的蓝色加号图标以在公式编辑器中查看它。 在 JSL 中,此公式写为: If( :YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar", :TRT 03 - :TRT 01, :YEAR == "2020" & :CROP == "玉米" & :TYPE == "IF", :TRT 05 - :TRT 01, :YEAR == "2021" & :CROP == "玉米" & :TYPE == "叶面", : TRT 04 - :TRT 01 )您还说:关于 ELSE 语句,我希望在不满足“IF”组合时不让公式执行任何类型的隐藏操作步骤。 换句话说,例如,如果YEAR=2020,CROP=Corn,TYPE=Foliar,那么只计算TRT3-TRT1并省略任何ELSE类型的动作,即保持所有剩余单元格值不变;并移至下一个可能指示公式采用 TRT5-TRT1 等的组合 IF 语句。是否可以以省略 ELSE 操作的方式构造 IF 语句? 我创建的公式在满足第一个 IF 条件的条件时设置适当的值,然后移动到下一个 IF 条件,依此类推。 您不必指定任何 ELSE 条件/值。 我希望这些信息对你有用。 如果您有任何其他问题,请告诉我。 亲切的问候, Sarah Seligman JMP 技术支持分享。 问。 学习。 连接。 - community.jmp.com 如果您对此事有任何后续问题,我将很乐意继续与您合作;只需在 5 个工作日内回复此电子邮件。 如果此回复已完全回答了您的问题,请回复让我知道您已收到此电子邮件,并且我已解决此问题并让您满意。 附件 7613517300.jmp (6 Kb)