REDCAP 日期文本框验证:如何添加基于另一个日期变量的动态最小值/最大值

问题描述 投票:0回答:1

几周以来我就是 REDCap 14.0.16 用户。我正在计划针对不同年龄段(例如 30 至 60 岁)的人进行一项研究。

为了防止意外地将参与者纳入年龄范围之外,我使用了两个变量:评估日期 [doa] 和出生日期 [dob]。这个想法是从评估日期减去 30 年和 60 年,分别设定允许的最长和最短出生日期。 两个日期均以日期 (D-M-Y) 格式进行验证,因此验证表达式的结果必须返回日期值,否则会出现警告“无法验证您提供的值,因为它不符合预期的格式。必需的格式:日期(日-月-年)”。

有什么办法可以防止引入超出年龄范围的参与者吗?如果可以,我该怎么办?

我尝试在最小值和最大值字段中使用特殊函数,但检索到“所需格式”错误(因为是同样的问题,我只包含最小值)。 Datediff 返回时间差,因此不起作用。 我尝试过“与日期或日期时间值一起使用的函数”,即日、月和年,试图减去评估日期的年龄。

  • 最小值:日([doa)-月([doa])-(年([doa])-60) -> 所需格式错误
  • 最小值:日([doa)月([doa])(年([doa])-60) -> 所需格式错误

由于上述所有方法都失败了,我尝试了验证字段中的操作标签,尽管我没想到会起作用,因为它们放错了位置。

  • 最小值:@CALCDATE([doa],-60,'y') -> 所需格式错误

由于它不起作用,我尝试连接表达式,因为我期望行为应该与手动输入日期相同。

  1. 我按照帮助部分的指示将[doa]验证更改为日期(年-月-日)
  2. 我连接了表达式:
  • 最小值:concat((年([doa])-60),月([doa]),日([doa]))-> 所需格式错误
  • 最小值:concat_ws("-",(年([doa])-60),月([doa]),日([doa]))-> 所需格式错误
validation dynamic redcap
1个回答
0
投票

这里有两种可能的解决方案:

  1. 创建在数据输入表单上实时执行的数据质量规则,例如
    [dob]!='' AND (datediff([dob], '[doa]', 'y') < 30 OR datediff([dob], '[doa]', 'y') > 60)
    。每当用户尝试注册 30 岁以下或 60 岁以上的人时,这都会自动创建警告。还包括检查以确保出生日期字段不为空。但是,数据质量规则仍然可以通过用户的选择手动覆盖,如果存在计划的协议偏差,这可能会很有用。
  2. minimum
    maximum
    验证范围接受管道变量来设置动态范围限制。因此,您可以创建单独的变量(可以选择使用
    @HIDDEN
    操作标签对用户隐藏它们)来存储这些最小和最大范围。例如,
    min_dob
    将是一个独立的文本字段,旨在存储
    @CALCDATE
    操作标签的值。然后,您可以将最小验证范围设置为
    [min_dob]
    。然后对最大验证范围重复相同的过程,例如,创建一个
    [max_dob]
    变量。
© www.soinside.com 2019 - 2024. All rights reserved.