我有几个日期列,有些条目包含条目“?”和其他条目包含MMDDYY10中的日期。格式。
我稍后会比较日期,并且有适用于此的代码,但缺少的条目和“?”导致错误发生并创建观察结果。
这是我的导入代码:
data WORK.esn_service ;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile 'C:\Documents and Settings\richardg\Desktop\Sirius\esn_service.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
informat DEACTIVATION_DATE best10. ;
informat DEACTIVATION_REASON $35. ;
informat REACTIVATION_DATE best10. ;
format DEACTIVATION_DATE mmddyy10. ;
format DEACTIVATION_REASON $35. ;
format REACTIVATION_DATE mmddyy10. ;
input
DEACTIVATION_DATE
DEACTIVATION_REASON $
REACTIVATION_DATE
;
if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
run;
两个日期列导致错误。我需要稍后比较日期,所以我不能选择一个随机日期来替换问题单元格。
答案 0 :(得分:0)
您在导入数据时遇到问题。一旦列是一个字符变量,它就会被卡住 - 您必须创建一个新列来更改它。要么更改导入方式以将其作为数字输入,要么为每个方法创建一个新列以强制它为数字。
如果您的数据已经包含MMDDYY10(在CSV文件中),那么您需要使用INFORMAT。 INFORMAT控制SAS读取数据的方式。
data WORK.esn_service ;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile 'C:\Documents and Settings\richardg\Desktop\Sirius\esn_service.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
informat DEACTIVATION_DATE mmddyy10. ;
informat DEACTIVATION_REASON $35. ;
informat REACTIVATION_DATE mmddyy10. ;
format DEACTIVATION_DATE mmddyy10. ;
format DEACTIVATION_REASON $35. ;
format REACTIVATION_DATE mmddyy10. ;
input
DEACTIVATION_DATE
DEACTIVATION_REASON $
REACTIVATION_DATE
;
if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
run;