Отсутствует дата в наборе данных - PullRequest
0 голосов
/ 28 апреля 2018

Я создал ниже SAS-код, чтобы получить данные для конкретной даты.

%let date =2016-12-31;


proc sql;
connect to teradata   as tera ( user=testuser password=testpass );
create table new as select * from connection tera (select acct,org 
from dw.act
where date= &date.);
disconnect from tera;
quit;

В некоторых случаях эта конкретная дата может отсутствовать в наборе данных из-за выходного дня.

Я думаю, как запросить предыдущую дату (не выходной), если указанная дата в выражении% let является выходной

Ответы [ 2 ]

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

Teradata имеет вид Sys_Calendar.Calendar. Вы можете использовать это в запросе, он имеет всю информацию о буднях и др.

если вы хотите использовать SAS, используйте функцию дня недели и используйте функцию symput вызова, как показано ниже. Teradata нуждается в одинарных кавычках вокруг даты, поэтому лучше использовать одинарные кавычки при создании макропеременной

  data _null_;
  /* this is for intial date*/
   date_int = input('2016-12-31', yymmdd10.);
 /* create a new date variable depending on weekday*/
  if weekday(date_int) = 7 then date =date_int-2; /*sunday -2 days to get 
  friday*/
  else if weekday(date_int) = 6 then date =date_int-1;/*saturday -1 day to get 
   friday*/
  else date =date_int;
  format date  date_int yymmdd10.;
  call symputx('date', ''''||put(date,yymmdd10.)||'''');
  run;
  %put modfied date is &date;
  modified date is '2016-12-29'

Теперь вы можете использовать эту макропеременную при прохождении.

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

Перед запуском запроса вам необходимо выполнить поиск или проверку данных по дате, которую вы используете. У вас есть два варианта:

  1. Используйте таблицу «Измерение даты» для идентификации / поиска выходных дней.
  2. Подсчитайте, сколько записей у вас есть на эту дату, если вы получите 0 аков на эту дату, используйте дату + 1 в своем запросе.

Я рекомендую использовать опцию таблицы измерений даты.

...