在intck的SAS数据间隔计算中,观察值返回缺失值

时间:2019-01-11 07:05:51

标签: sas

我试图找到date9格式的两个$4.00变量之间的间隔时间。

该工作示例具有两个日期格式如18JAN2017和25FEB2017的变量。我想创建第三个变量,该变量显示在观察值/受检者ID中这些日期之间的间隔所对应的星期数。

我尝试过:

  data test1;
  set inputs1;    
  difference = intck('week',input(date1,date9.),input(date2,date9.));
  run;

此代码返回缺少和$ 0值。我希望有一个名为difference的新变量通过观察显示两个日期之间的星期数。

这是格式还是语法问题,还是intck无法处理变量?

1 个答案:

答案 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;