If statement SAS:如何编写IF语句对特定日期之前和之后的数据进行分类
我有一个表,其中一列名为DATE1,格式为YYYY-MM-DD,我需要创建另一列将数据分为两组。我应该如何编写代码?我认为问题在于日期格式,语法应该改变If statement SAS:如何编写IF语句对特定日期之前和之后的数据进行分类,if-statement,sas,If Statement,Sas,我有一个表,其中一列名为DATE1,格式为YYYY-MM-DD,我需要创建另一列将数据分为两组。我应该如何编写代码?我认为问题在于日期格式,语法应该改变 Data Tabla1; set &tTable0; if DATE1 < 2001-12-31 THEN DATE1_AUX = "<2001"; else DATE1_AUX = >2001; keep Date1 DATE1_AUX;
Data Tabla1;
set &tTable0;
if DATE1 < 2001-12-31 THEN DATE1_AUX = "<2001"; else
DATE1_AUX = >2001;
keep Date1
DATE1_AUX;
run;
数据表1;
set&tTable0;
如果DATE1<2001-12-31,则DATE1_AUX=“尝试以下操作:
Data Tabla1;
set &tTable0;
if put(DATE1,yymmdd10.)< '2001-12-31' THEN DATE1_AUX = "<2001";
else DATE1_AUX =">2001";
keep Date1 DATE1_AUX;
run;
数据表1;
set&tTable0;
如果将(日期1,yymmdd10.)放入“2001-12-31”,则日期1_AUX=“2001”;
保持Date1 Date1_AUX;
跑
SAS将日期值作为自1960年1月1日起的天数存储在内部。换句话说,要比较两个日期字符串(即对其中一个进行分类),我们必须首先为每个日期字符串推断自1960年1月1日起的天数
幸运的是,有一些时态格式和函数可以让我们的生活更轻松。下面是一个解决方案,您可以使用它按照您描述的方式对日期进行分类:
data Table0;
format DATE1 YYMMDD10.;
input DATE1 YYMMDD10.;
cards;
2001-12-30
2001-12-31
2002-01-01
;
run;
data Table1;
length DATE1_AUX $ 10.;
set Table0;
if DATE1 < input('2001-12-31',YYMMDD10.) then DATE1_AUX = '< 2001';
else DATE1_AUX = "> 2001";
run;
如果未创建新变量,并且未更改DATE1
存储的值,但表格和图形中日期的格式表示将被分类。是DATE1
数字还是字符?在else
语句中>2001
应在引号中作为>2001“
.explicit-是date1
一个SAS日期值(因此,未格式化的值类似于16143
),还是字符串[或字符串的数字表示],“2001-05-12”
或类似值?”?(如果您不太了解SAS日期,无法了解该答案,请尝试添加一个-数据表1;设置&tTable0;new_date=date1+1;run;
,然后查看您是否得到比旧值晚一天的新值,或者如果您在日志中收到关于字符数字转换的投诉,然后在new_date字段中缺少一个值。)这似乎并没有以一种特别有效的方式回答这个问题,也没有包含任何关于它如何工作的解释。
proc format;
value aux_fmt low - '31DEC31'd = '< 2001'
'01JAN01'd - high = '> 2001';
run;
data Table1;
set Table0;
format DATE1 aux_fmt.;
run;