在转换时需要帮助,然后从sas转换为python

时间:2018-12-16 05:34:05

标签: python python-3.x pandas datetime

我的数据采用以下格式,我想创建以下代码,该代码依赖于此数据到Python代码。我发现很难继续。

data out1 out2;
    set Input 
    if excl=0 and strip(segment) ne "segment";
        if intck("month",vardate,'30Jun2008'd)<0 and intck("month",vardate,'31Mar2010'd)>=0 then do;
        Rec=1;
        red=0;
    end;
    else if intck("month",vardate,'31Mar2010'd)<0 and intck("month",vardate,'30Sep2013'D)>=0 then do;
        Rec=0;
        red=1;
    end;
    else do;
        Rec=0;
        red=0;
    end;
        if vardate in ('30Jun2008'd,'30Jun2009'd,'30Jun2012'd,'30Jun2014'd) or intck("month",vardate,'30Jun2016'd)<=0 then output out2;
    else output out1;
run;

enter image description here

我尝试开始编写这段代码,但是没有用。现在这是我的代码。

recession = 0
recovery = 0

if data['excl_flg'] == 0 and data['segment'] != 'not modeled':
    if (data['snapdate'].dt.to_period('M') - '2008-06-30'.dt.to_period('M')) < 0 & (data['snapdate'].dt.to_period('M') - '31Mar2010'.dt.to_period('M') >= 0:
         recession = 1
    elif (data['snapdate'].dt.to_period('M') - '31Mar2010'.dt.to_period('M')) < 0 and (data['snapdate'].dt.to_period('M') - '30Sep2013'.dt.to_period('M')) >= 0:
        recovery = 1

1 个答案:

答案 0 :(得分:0)

很多在这里:

  • &是按位和运算符。您需要and logical operator
  • IGNORE与图片中显示ignore的数据不匹配。
  • VARDATE与图片中显示vardate的数据不匹配。
  • 当SAS中的if语句具有do时,直到end为止的所有内容都是该if的一部分。
  • 缩进在Python中很重要。

尝试此Python作为SAS代码的第一部分:

rec = 0
red = 0

if data['excl'] = 0 and data['segment'] != 'ignore':
    if (data['vardate'].dt.to_period('M') - '30Jun2008'.dt.to_period('M')) < 0 and (data['vardate'].dt.to_period('M') - '30Jun2010'.dt.to_period('M') >= 0:
        rec = 1
    elif (data['vardate'].dt.to_period('M') - '30Jun2010'.dt.to_period('M')) < 0 and (data['vardate'].dt.to_period('M') - '30Jun2013'.dt.to_period('M')) >= 0:
        red = 1

注意:Python不是我的母语。而且,我对Panda一无所知,您似乎正在使用Panda将日期字符串转换为时间间隔。因此,我不能保证日期逻辑。另外,我已经很长时间没有做SAS了。

这应该足以让您入门。