【问题标题】:first and last order SAS第一个和最后一个订单 SAS
【发布时间】:2016-03-10 11:58:43
【问题描述】:

我有两行数据,

订购 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:需要算术运算符。

任何人都可以帮助或提出不同的建议吗?

【问题讨论】:

    标签: sas


    【解决方案1】:

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

    其次,first.orderlast.order 是布尔值 - 1 或 0,仅此而已,表示您所在的行是按该变量排序时新值的第一行或最后一行相似地。如果你要使用它们,你还必须通过该变量有一个by 语句。

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

    length active 8;
    

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

    【讨论】:

    • 感谢乔,我认为可能有另一种方法可以实现我想要做的事情,虽然我更正了上面的代码,但不确定它是否能达到我的需要。 ,我在下面重新发布了我的查询,你能提出一个替代方案吗?
    【解决方案2】:
     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
    

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

    任何想法都非常感谢 谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多