Char на сегодняшний день в SAS Proq sql - PullRequest
0 голосов
/ 07 октября 2019

У меня есть столбец таблицы sql со следующими наблюдениями:

AB_191007_01
AB_190930_02

Я хочу преобразовать этот столбец в дату в другом столбце в формате гггг-мм-дд.

proc sql;
CREATE TABLE result AS
SELECT input(compress(col_name,"AB_"), ANYDTDTE6.) AS col_date  format=yymmdd6.
FROM work.test
;quit;

Предыдущий код вызывает у меня странные результаты:

2009-06-18
1926-12-17
1926-12-17
2009-06-18
2006-08-18
2016-05-18
2011-03-19
1926-12-17

Ответы [ 2 ]

0 голосов
/ 07 октября 2019
  1. ANYDTDTE информация зависит от вашей опции DATESTYLE (которая, в свою очередь, зависит от LOCALE), поэтому вы должны либо указать ее, либо использовать другую информацию о фиксированной позиции, например, yymmdd6.
  2. Чтение года 26 как 1926 или 2026 зависит от вашей опции YEARCUTOFF.
  3. compress(), как написано, также сжимает секунду _, поэтому вы предоставляете input() больше символов, чем предполагалось (хотяне должен влиять на .6 информат).
0 голосов
/ 07 октября 2019

Предполагая, что вы хотите преобразовать символ AB_191007_01 в дату 2019-10-07, используйте функцию SCAN, чтобы получить среднюю часть даты между подчеркиванием, затем INPUT как yymmdd6. При желании вы можете изменить формат (я использовал yymmdd10.).

SELECT input(scan(col_name,2,"_"),yymmdd6.) AS col_date format yymmdd10.
...