gpt4 book ai didi

sas - SAS 中的连续月份数据计数

转载 作者:行者123 更新时间:2023-12-04 09:35:44 25 4
gpt4 key购买 nike

我有一个典型的银行数据,需要一些帮助。
有 3 列:帐户 ID、月份键(yyyymm 格式)和付款类型。付款类型可以取值 IO、IOA、PIF、PI、P、NFD、Null。
我有大约 250,000 个帐户,目标是找到连续 60 个月以上的 Payment_Type 为 ("IO","IOA") 的帐户。在 IO 中连续 60 个月不是我的目标。

data have;
length Account_ID $2.
Month_Key 8.
Payment_Type $3.
;

format Month_Key date9.;

input Account_ID$ Month_Key:yymmn. Payment_Type$;
datalines;
A1 201001
A1 201002 IO
A1 201003 PIF
A1 201004 PI
A1 201005 P
A1 201006
A1 201007 IOA
A1 201008 IO
A1 201009 IOA
A1 201010 IOA
A1 201011 IO
A1 201012 IO
A1 201101 IO
A1 201102 IO
A1 201103 IO
A1 201104 IO
A1 201105 IO
A1 201106 IO
A1 201107 IO
A1 201108 IO
A1 201109 IO
A1 201110 IO
A1 201111 IO
A1 201112 IO
A1 201201 IO
A1 201202 IO
A1 201203 IO
A1 201204 IO
A1 201205 IO
A1 201206 IO
A1 201207 IO
A1 201208 IO
A1 201209 IO
A1 201210 IO
A1 201211 IO
A1 201212 IO
A1 201301 IO
A1 201302 IO
A1 201303 IO
A1 201304 IO
A1 201305 IO
A1 201306 IO
A1 201307 IO
A1 201308 IO
A1 201309 IO
A1 201310 IO
A1 201311 IO
A1 201312 IO
A1 201401 IO
A1 201402 IO
A1 201403 IO
A1 201404 IO
A1 201405 IO
A1 201406 IO
A1 201407 IO
A1 201408 IO
A1 201409 IO
A1 201410 IO
A1 201411 IO
A1 201412 IO
A1 201501 IO
A1 201502 IO
A1 201503 IO
A1 201504 IO
A1 201505 IO
A1 201506 IO
A1 201507 IO
A1 201508 IO
A1 201509 PIF
A1 201510 PIF
A1 201511 PIF
A1 201512 PIF
A1 201601 PIF
A1 201602 PIF
A1 201603 PIF
;
run;
该账户从 201007 到 201508 连续 62 个月处于 IO 状态。
我的最终输出应该有账户 ID,以及一个指示账户是否处于 IO > 60+ 个月的指标。如果 IO 超过 60 个月,则最好创建一个值为 1 的指标,例如下面的指标,否则为 0。
Account_ID IO_GT_60_Mths_Ind

A1         1
有人可以帮帮我吗。欣赏!!

最佳答案

欢迎使用堆栈溢出!您可以使用数据步骤、按组处理和 sum 来完成此操作。陈述。下面的代码将增加 n由 1. 如果出现以下情况,我们将重置计数器:

  • 我们到达一个新帐户
  • 付款类型不是IOIOA
  • 当前月与上月之间的月数 > 1

  • 代码:
    proc sort data=have;
    by account_id month_key;
    run;

    data want;
    set have;
    by account_id month_key;

    lag_month = lag(month_key);

    if(first.account_id) then call missing(lag_month);

    if( first.account_id
    OR intck('month', lag_month, month_key) > 1
    OR payment_type NOT IN('IO', 'IOA')
    )
    then n = 0;

    n+1;

    IO_GT_60_Months_Ind = (n GE 60);

    format lag_month date9.;
    run;
    您的问题很清楚,但通常我们会要求提供示例代码和您尝试过的内容。请务必在 datalines 中格式化您的数据或可下载的 csv,并在下次发布您的尝试。

    关于sas - SAS 中的连续月份数据计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600332/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com