Как определить формат даты от заданной даты - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел знать, как мы можем определить формат даты с заданной даты

например, у меня есть дата 20180423, затем в sas я хочу определить формат как 'ггггммдд'

аналогично, у меня есть дата, указанная в данных как 12022018, тогда я хочу определить ее как 'ddmmyyyy'

Обратите внимание, что дата предоставлена ​​мне в надлежащую дату, но я хочу определить формат сейчас. Дата может быть другой в будущем поэтому мне нужно позаботиться обо всем формате даты через SAS

То, что я думал, было дано дата 20180422 использовать функцию substr

data test;
a=20180422;
a=substr(a,1,4);
b=substr(a,5,1);
c=substr(a,7,1);
run;

но не уверен.

Если кто-то может предоставить решение, то оно действительно поможет мне в работе над проектом.

Заранее благодарим за помощь.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать условие if внутри шага данных. Используя условие If, проверьте, чтобы условие было истинным (проверьте, что значение даты удовлетворяет требуемым критериям), затем отформатируйте дату, используя функцию put. Функция Put может принять источник в качестве первого аргумента и отформатировать в качестве второго аргумента, и вернуть отформатированное значение , Различные значения одного и того же столбца могут иметь разные форматы, указанные таким образом.

Как то так,

  if a = 'date1CheckCondtion' then newA = put(a , dateformat1.);
  if a = 'date2' then newA = put(a , dateformat2.);

Затем вы можете выбрать получение всех значений в общем формате, например:

  dateA=input(newA,mmddyy6.);
0 голосов
/ 27 апреля 2018

Используйте input(a,anydtdte20.); это преобразует любую дату в дату SAS, а затем использует функции Year(), Month(), Day() для извлечения необходимых данных. Вы найдете этот SAS Post очень полезным о датах и ​​локалях.

Решение:

Я создал таблицу с двумя строками; каждая строка имеет свой формат даты ГГГГММДД и ДДММГГГ, чтобы показать вам, как код будет обрабатывать различные форматы даты, сохранить их в дату SAS и разбить их на год, месяц и день:

options DATESTYLE=DMY;
data have;
input a;
datalines;
20180422
12022018
;
run;

data test;
set have;
format date_a date9.;
date_a=input(a,anydtdte20.);
Year_a=year(date_a);
month_a=month(date_a);
day_a=day(date_a);
run;

Выход:

a=20180422 date_a=22APR2018 Year_a=2018 month_a=4 day_a=22 
a=12022018 date_a=12FEB2018 Year_a=2018 month_a=2 day_a=12

Output

0 голосов
/ 27 апреля 2018

Звучит так, как будто вы хотите преобразовать различные значения в дату. SAS сохраняет даты в виде числа, являющегося числом дней с 1 января 1960 года. Затем обычно форматируют это число для отображения в виде даты в любом предпочтительном формате.

При импорте дат, которые уже имеют формат, необходимо использовать функцию input вместе с информацией, чтобы преобразовать форматированное значение в дату SAS. Если все значения даты считываются в одном и том же формате, то можно использовать конкретную информацию. В вашем случае, когда используются разные форматы, вы можете использовать информат anydtdte., который преобразует большинство стандартных форматов даты в дату SAS.

В приведенном ниже примере конвертируется 3 различных формата даты в дату SAS, затем отображается дата SAS в формате date9.. Я напечатал как неотформатированные, так и отформатированные новые значения в журнале, чтобы вы могли видеть, что они хранятся в виде чисел.

data _null_;
input date_in $20.;
date_out = input(date_in, anydtdte20.);
put date_in date_out date_out :date9.;
datalines;
20180422
12022018
27apr2018
;
run;
...