【问题标题】:Subtracting Rows in SAS Ent Guide在 SAS Ent Guide 中减去行
【发布时间】:2013-07-03 19:22:20
【问题描述】:

我有以下数据集:

Row   - Customer    - Renew Date     - Type of Renewal     - Days  
 1       - A        - June 10, 2010        - X                        
 2       - A        - May 01, 2011         - Y  
 3       - B        - Jan 05, 2010         - Y  
 4       - B        - Dec 10, 2010         - Z   
 5       - B        - Dec 10, 2011         - X    

有没有一种方法可以在查询构建器中为每个客户从第 2 行中减去第 1 行,这样我就可以获得客户续订会员资格的“天”数?
基本上,我需要帮助来减去查询生成器中的行。
请注意。

【问题讨论】:

    标签: sas query-builder enterprise-guide


    【解决方案1】:

    如果您编写一个数据步,这并不难。我不知道它在查询生成器中很容易完成。

    data have;
    informat renew_date ANYDTDTE.;
    format renew_date DATE9.;
    infile datalines dlm='-';
    input Row Customer $ Renew_Date  Renewal_Type $;
    datalines;
     1       - A        - June 10, 2010        - X                        
     2       - A        - May 01, 2011         - Y  
     3       - B        - Jan 05, 2010         - Y  
     4       - B        - Dec 10, 2010         - Z   
     5       - B        - Dec 10, 2011         - X    
     ;;;;
     run;
    
     data want;
     set have;
     by customer;
     retain prev_days;  *retain the value of prev_days from one row to the next;
     if first.customer then days_since=0; *initialize days_since to zero for each customer's first record;
     else days_since=renew_date-prev_days; *otherwise set it to the difference;
     output;    *output the current record;
     prev_days=renew_date; *now change prev_days to the renewal date so the next record has it;
     run;
    

    【讨论】:

    • 这很有帮助。谢谢。但最好知道这是否也可以在查询构建器中以某种方式完成。
    • 我强烈建议不要将 Query Builder 视为除简短查询之外的任何工具 - 它并不是真正意味着做任何复杂的事情。当你看到“嗯,那个数据很有趣,我想知道是否有类似......”的时候,它基本上就在那里,但又不想费心编写数据步骤代码。跨度>
    • +1 @乔。此外,查询生成器也很难重用。如果您花 20 分钟点击您的方式获得一个很好的查询,并希望将其应用到不同的表,那么您就被卡住了。通过编写代码(SQL 或数据步骤),应用到新的输入数据集很简单。
    • 快速问题.....我必须添加另一个有 sno 的列。从零开始。目前我正在使用两个单独的数据集进行操作。我可以把它合二为一吗?这就是我写的。-------- data want1;设置有;按客户;保留prev_renewal;如果 first.customer 那么 prev_renewal=0;否则 prev_renewal=prev_renewal+1;输出;跑;有没有办法可以将此查询添加到上面的查询中。
    • 请问这是一个新问题,在 cmets 中回答问题太难了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多