第一个和最后一个订单SAS

时间:2016-03-10 11:58:43

标签: sas

我有两行数据,

订单 17/01/2016 2014年1月2日

基本上我想运行这样的逻辑;

data A.test_active;
set A.Weekly_Email_files_cleaned4;

length active :8.;
length inactive :8.;
if first.Order between '01Jan2014'd and '31Dec2015'd then active= 1;
if last.order between '01Jan2014'd and '31Dec2015'd then inactive= 1;

run;

字段"订单"当我检查文件属性时,由DDMMYY10格式化,但我一直收到此错误 错误388-185:期待算术运算符。

任何人都可以在同样的徒劳中帮助或建议不同的东西吗?

2 个答案:

答案 0 :(得分:2)

在SAS中,between仅在SQL上下文中有效:通常是实际的PROC SQLWHERE语句。它在SAS中无效。您可以使用in (firstval:lastval)代替,如果这些值是整数(日期是)。如果它们不是整数,则需要使用if firstval le val le lastval或类似的(也可以使用ge/lt/gt/>/<或任何您喜欢的内容,具体取决于事物的顺序。)

其次,first.orderlast.order是布尔值 - 1或0,没有别的,表示您在按该变量排序时是新行的第一行的行,或类似的最后一行。如果你打算使用它,你也必须有一个by语句。

第三,你的长度陈述错了;我想,你在这里混淆了三件不同的东西。如果您使用默认长度8,则不需要数字的长度语句,如果您确实喜欢使用它们,则需要:

length active 8;

:.,两者都用于不同目的。

答案 1 :(得分:0)

 ID     first_order      Order
 alex      01/01/2013     23/01/2015
 alex      01/01/2013     23/01/2015 
 alex      01/01/2013      03/04/2013

基本上如果订单存在于第一个订单之后的某个时间范围内(第一个订单日期的一年内),那么用户就是“活跃的”

任何想法都非常感激 感谢