我试图找到date9格式的两个$4.00
变量之间的间隔时间。
该工作示例具有两个日期格式如18JAN2017和25FEB2017的变量。我想创建第三个变量,该变量显示在观察值/受检者ID中这些日期之间的间隔所对应的星期数。
我尝试过:
data test1;
set inputs1;
difference = intck('week',input(date1,date9.),input(date2,date9.));
run;
此代码返回缺少和$ 0值。我希望有一个名为difference
的新变量通过观察显示两个日期之间的星期数。
这是格式还是语法问题,还是intck
无法处理变量?
答案 0 :(得分:1)
一种格式告诉SAS在查看值时如何呈现值。该格式不会更改基础值。因此,如果变量date1
的格式为date9.
,则表示该变量为数字,并采用表示SAS日期时代中的日期值的值(0为01-JAN-1960)。因此,不应将数值传递给INPUT
。
字符变量可以具有构造为ddMONyyyy
的值。该变量将不会被格式化date9.
字符值将是日期值的格式化表示,并且必须通过INPUT
来传递以获取对应于SAS时期中日期的数字值。>
intck
当然可以处理变量-实际上,它可以处理任何(隐式或显式)计算为数字的表达式。不能将包含格式化日期表示形式的字符串隐式评估为SAS数字,而必须通过input
进行传递。
通过INPUT
传递的格式化数字不正确。数字值将隐式地未经格式化而进入INPUT
函数,并转换为字符串,并且将根据指定的格式来解析“数字”,否则将失败。
以下是一些示例代码,探讨了上面的叙述:
data _null_;
today = today();
tomorrow = today + 1;
diff = intck ('day', today, tomorrow);
put today tomorrow diff;
date1num_as_char = '21560';
date2num_as_char = '21561';
diff = intck ('day', date1num_as_char, date2num_as_char);
put date1num_as_char date2num_as_char diff;
date1_as_string = '11JAN2019'; * not a SAS date value, is a date representation;
date2_as_string = '12JAN2019';
diff = intck ('day', date1_as_string, date2_as_string);
put date1_as_string date2_as_string diff;
now = today();
format now date9.;
put now=;
now_through_input = input(now,date9.); * just wrong;
put now_through_input=;
run;