Нужна помощь в преобразовании, если еще, а затем сделать функцию в Python из SAS - PullRequest
0 голосов
/ 16 декабря 2018

Мои данные в формате ниже, и я хочу создать код ниже, который зависит от этих данных в коде 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 голосов
/ 16 декабря 2018

Здесь происходит много:

  • & - побитовый оператор.Вы хотите, чтобы логический оператор and .
  • IGNORE не соответствовал данным на вашей картинке, что показывает ignore.
  • VARDATE несопоставьте данные на вашей картинке, на которых показано vardate.
  • Когда оператор if в SAS имеет 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, которую вы, похоже, используете для преобразования строк дат в интервалы периодов.Так что я не могу ручаться за логику даты.Кроме того, я не делал SAS в течение очень долгого времени.

Этого должно быть достаточно, чтобы начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...