Дата SAS от 22,3 до ггммдд8 - PullRequest
       13

Дата SAS от 22,3 до ггммдд8

0 голосов
/ 23 января 2019

Я использую SAS, чтобы перенести таблицу, которая находится на сервере Microsoft SQL Server, и перенести ее в Hadoop. Проблема, с которой я сталкиваюсь, заключается в том, что переменная данных: INSURANCE_DATE.Week_Start_Date - это Datetime 22.3, но ее необходимо преобразовать в yymmddn8. Я приношу данные за 3 года, код ввода:

% let three_year_start =% sysfunc (putn (% sysfunc (intnx (год,% sysfunc (today ()), -3)), yymmddn8.)); / * * / % let three_year_end =% sysfunc (putn (% sysfunc (today ()), yymmddn8.)); / сегодня /

отлично работает, но я не уверен, как отформатировать INSURANCE_DATE.Week_Start_Date правильно так что мой пункт где работает.

    %let three_year_start=%sysfunc(putn(%sysfunc (                 
    intnx(year,%sysfunc(today()), -3)), yymmddn8.)); /* */
    %let three_year_end=%sysfunc(putn(%sysfunc(today()), yymmddn8.)); /*is 
    today*/
    proc SQL;

      create table BA_INS as

    SELECT  
    format (INSURANCE_DATE.Week_Start_Date) yymmdd10.) as Week_Start_Date

    FROM
      dbo.DIM_INSURANCE_DATE
    WHERE
    (dbo.DIM_INSURANCE_DATE.Week_Start_Date  
    between &three_year_start. and  &three_year_end.);
    quit;

Мне нужно решение, как конвертировать формат datatime 22.3 в yymmdd10. в запросе sql proc

Ответы [ 3 ]

0 голосов
/ 23 января 2019

используйте datepart, чтобы взять формат, а затем применить формат

SELECT  
datepart(INSURANCE_DATE.Week_Start_Date) format= yymmdd10. as Week_Start_Date
0 голосов
/ 23 января 2019

Не уверен, для чего вы планируете использовать макропеременные, но вы используете дополнительный вызов %SYSFUNC(). Вам не нужно вызывать PUTN() для форматирования значения, %SYSFUNC() уже примет спецификацию формата.

%let three_year_start=%sysfunc(intnx(year,%sysfunc(today()),-3,b),yymmddn8.);
%let three_year_end=%sysfunc(today(), yymmddn8.);

Таким образом, вы получите такие значения, как 20160101 и 20190123. Примечание для SAS, если вы не заключите их в кавычки, они будут обрабатываться как числа 20 160 101 и 20 190 123, а не как значения даты или времени. И если вы заключите их в кавычки, они будут просто строками.

Если вы хотите просто сгенерировать значение даты, не пытайтесь форматировать числа. Затем вы получите значения, такие как THREE_YEAR_START=20454 и THREE_YEAR_END=21572, которые представляют количество дней с 1960 года. Затем в вашем коде SQL вы можете использовать их. Но сначала вам нужно преобразовать значение datetime в значение date. В противном случае вы сравниваете яблоки и апельсины (секунды и дни).

%let three_year_start=%sysfunc(intnx(year,%sysfunc(today()),-3,b));
%let three_year_end=%sysfunc(today());
...
where datepart(Week_Start_Date) between &three_year_start and &three_year_end

Или вы можете отформатировать ваши макропеременные так, чтобы они выглядели как значения, понятные информату DATE (или DATETIME), и использовать их в качестве литералов даты (или даты / времени), добавляя кавычки и соответствующие суффиксные буквы.

ДАТА Литералы

%let three_year_start=%sysfunc(intnx(year,%sysfunc(today()),-3,b),date9.);
%let three_year_end=%sysfunc(today(), date9.);
...
where datepart(Week_Start_Date) between "&three_year_start"d and "&three_year_end"d

Литералы DATETIME

%let three_year_start=%sysfunc(intnx(dtyear,%sysfunc(datetime()),-3,b),datetime19.);
%let three_year_end=%sysfunc(datetime(), datetime19.);
...
where Week_Start_Date between "&three_year_start"dt and "&three_year_end"dt
0 голосов
/ 23 января 2019

Если исходное значение, извлекаемое из SQL Server, в SAS представляет собой значение SAS datetime , и вы хотите, чтобы целевое значение было передано в Hadoop из SAS, как из SAS дата значение, вы можете использовать функцию datepart в SAS.

proc sql;
  create table HADOOP.TARGET_TABLE as
  select
  …
  , datepart(Week_Start_Date) as Week_Start_Date format=date9.
  …
  from
    SQLSRV.SOURCE_TABLE
  … 
  ;

Я не думаю, что фактический формат даты важен, только то, что это один из форматов даты SAS. Движок SAS / Connect проверяет столбец SAS, идущий к цели, видит формат даты и автоматически вносит изменения, необходимые для вставки значения даты SAS в качестве значения даты в целевой системе.

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