我是Spotfire的新手,需要帮助才能获得计算列的正确表达式。
我的数据包含在ID
列中分组的不同主题。对于每个ID,在不同的日子测量体重。天数在Day
列中给出,并表示为1,2,3 ......
最后一天用Last
表示,另一列给出了体重测量值。存在另一列,称为Baseline
。如果该列包含该行的Y
,则测量的体重被视为基线。
我需要插入一个计算列,其中包含Body measurement
在Day
上标记的Last
与Body measurement
在Y
标记的列之间的差异Baseline
。
应该为每个新ID执行此操作。我无法弄清楚这一点。有人可以告诉我如何去做吗?
因此,Rita的计算列将给出 -4 (Last=56
的体重和baseline=56
的BodyWeight,所以52-56 = -4 < /强>)
答案 0 :(得分:1)
您提供的示例数据有点奇怪,尤其是[Day]
列。如果它在你的控制范围内,我建议在这里使用实际日期而不是数字/字符串。
除此之外,我能够获得您想要的结果,但它需要两个计算列:第一列将[Day]
和[Baseline]
列合并为一列,第二列包含你想要的信息。
第1列,我打电话给Day (int)
:
CASE
WHEN [Day]="Last" THEN 1000000
WHEN [Baseline]="Y" THEN -1000000
WHEN [Day]!="Last" THEN Integer([Day])
END
我选择了一个随机的高和低最大值来建立一个按时间顺序排列。这将使1000000
代替“最后”(如果您有任何超过一百万天的程序,则需要增加此数字)。 [Baseline]
列的内容相同,但该值为-1000000
,这可能是您在本专栏中看到的最低值。 这些都是假设,可能对您的实施无效。最后,在所有其他情况下,将使用日期编号。
第2列,我打电话给Diff
:
Last([Weight]) OVER (Intersect([Name],LastNode([Day (int)]))) -
First([Weight]) OVER (Intersect([Name],FirstNode([Day (int)])))
第一行使用所谓的OVER
expression来检索[Weight]
的第一个值,按[Day (int)]
排序,每[Name]
。第二行给出了相反的结果,因此差异计算为-4
(或任何适当的值)。