我有一个名为DATE1的列,其格式为YYYY-MM-DD,我需要创建另一列来将数据分类为两组。我该怎么写代码?我认为问题在于日期格式,语法应该改变。
</nav>
<!-- Latest compiled and minified JavaScript -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</body>
</html>
答案 0 :(得分:0)
试试这个:
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 :(得分:0)
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;
在此我们必须首先将字符串2001-12-31
转换为代表SAS日期的数字,然后才能使用它来进行比较。
可能适用的另一个想法是制作自定义格式:
proc format;
value aux_fmt low - '31DEC31'd = '< 2001'
'01JAN01'd - high = '> 2001';
run;
data Table1;
set Table0;
format DATE1 aux_fmt.;
run;
如果未创建新变量,并且DATE1
存储的值未更改,则表格和图表中日期的格式化表示将被分类。