Формат даты в базе SAS

Вы можете использовать метод Rect.IntersectsWith

0
задан Rajesh 18 January 2019 в 10:46
поделиться

3 ответа

Во многих случаях ANYDTDTM может быть полезен для информации, однако, как вы указали (в комментариях), это не так для формата даты и времени, представленного в вопросе.

Строка может быть перестроена в виде даты и времени в SAS с использованием cats и scan

data have;    
  date_string = "SAT Mar 17 01:29:17 IST 2018";    
run;

data want;
  set have;

  dt_wrong = input(date_string, anydtdtm.);

  dt_right = input ( cats 
          ( scan(date_string,3),
            scan(date_string,2),
            scan(date_string,6),':',
            scan(date_string,4)
          ), datetime20.);

  put date_string= /;
  put dt_right= datetime20. " from input of cats of string parts";
  put dt_wrong= datetime20. " from anydttm ";
run;

* sample macro that can be applied in data step or sql;

%macro dts_to_datetime(dts);
  input ( cats 
          ( scan( &dts , 3),
            scan( &dts , 2),
            scan( &dts , 6), ':',
            scan( &dts , 4)
          )
        , datetime20.)
%mend;

data want2;
  set have;
  dt_righton = %dts_to_datetime(date_string);

  format dt_righton datetime20.;

  put dt_righton=;
run;

. Макрос также может использоваться в выражениях where, таких как

where '18-Mar-2018:0:0'DT <= %dts_to_datetime (date_string)

Или SQL

, %dts_to_datetime (date_string) as event_dtm format=datetime20.
0
ответ дан Richard 18 January 2019 в 10:46
поделиться

date является числовым значением, и вы не должны сравнивать его со строковым значением, сравнивайте его с литералом даты, преобразовав также ваше значение в date. сравнение больших и меньших значений со строками, как правило, не служит какой-либо цели и может привести к ошибочным результатам. меньше и больше чем имеет смысл / смысл при сравнении числовых переменных

 data have;
 b = "SAT Mar 17 01:29:17 IST 2018";
 output;
 b= "SAT Mar 19 01:29:17 IST 2018";
output;
 b= "SAT Jun 20 01:29:17 IST 2018";
output;
b= "SAT Mar 25 01:29:17 IST 2018";
output;
run;


proc sql;
select * from have
where input(cats(scan(b,3),scan(b,2), scan(b, -1)),date9.) > "19Mar2018"d;
0
ответ дан Kiran 18 January 2019 в 10:46
поделиться

Я использовал подстроку. Я создал новый столбец NEW_DATE в наборе данных. Как упоминалось выше, формат даты: Сб 17 марта 01:01:01 IST 2018 . Ниже приведен шаг данных для извлечения даты в формате DD-MMM-YYYY

data new;
set old;
new_date = substr(date,9,2)||"-"||substr(date,5,3)||"-"||substr(date,25,4);
new_date_updated = input(new_date,date11.);
format new_date_updated date11.;
run;

, затем я использую новый столбец в proc sql

proc sql;
select * from new where new_date_updated>'17-Mar-2018'd;
quit;

, и это сработало для меня. 114]

Спасибо

Проверено выше подход со всеми сценариями, отлично работает со всеми

0
ответ дан Rajesh 18 January 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: