我有一个JSL脚本,它定期从Access数据库中提取数据。
访问数据库包含日期列“可用日期”和dd-Mon-YYYY(例如, 12-APR-2018)格式。 我想做的是在JMP中创建一个新列“ Target Date”,为每行的“ Available Date”中的日期添加x天数。
例如:在下图中,目标日期等于可用日期+ 4天。 我正在尝试根据可用日期自动计算目标日期。 天数基于“时间(月)”列。

到目前为止,这是我尝试过的方法,显然不起作用。 我想我需要将“可用日期”列转换为数字数据类型,然后添加天数并转换回“字符”?
dt << New Column("Target Date", "Character", "Nominal");
dt << For Each Row(
IF (:"Time (Months)" <= 3, :"Target Date" = :"Available Date" + 4 ),
IF (:"Time (Months)" > 3, :"Target Date" = :"Available Date" + 7 )
);所附表格将4天添加到您的可用日期列中,以获取目标日期。步骤:使用适当的日期格式将可用日期的数据类型更改为数字/连续数据;然后使用日期增量功能将可用日期增加4天,最后更改生成的目标日期列的格式,使其与您在可用日期列中使用的格式匹配。
另一条便条-在您的示例中,看起来您增加了一周(7天而不是4天)。
除非有确凿的理由将“目标日期”值保留为字符列,否则建议您将其转换为“ JMP日期”列。
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", format( "ddmonyyyy") );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
)
);

通过以下修改将上面的输出转换为字符非常容易
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
"ddmonyyyy"
),
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 ),
"ddmonyyyy"
)
)
);

如果输出格式需要与输入数据格式完全相同,则可以完成以下操作
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP",
"OCT", "NOV", "DEC"};
for each row(
if( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
:Target Date = Substr( "0", Length( Char( Day( temp ) ) ) ) ||
Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );
);

如果您要使用公式而不是“对于每一行”,则用于上面的输出的公式
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
If( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
Substr( "0", Length( Char( Day( temp ) ) ) ) || Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );