Вставить в функцию с SAS / SQL - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу вставить значения в новую таблицу, но все время получаю одну и ту же ошибку: предложение VALUES в пункте 1 пытается вставить больше столбцов, чем указано после имени таблицы INSERT. Это если я не ставлю апострофы вокруг своего свидания. Если я поставлю апострофы, мне скажут, что типы данных не соответствуют второму значению.

    proc sql;
    create table date_table
    (cvmo char(6), next_beg_dt DATE);
    quit;

    proc sql;
      insert into date_table 
    values ('201501', 2015-02-01)
    values ('201502', 2015-03-01)
    values ('201503', 2015-04-01)
    values ('201504', 2015-05-01);
    quit;

Второе значение должно оставаться в качестве даты, поскольку оно будет использоваться с символами> и <в дальнейшем. Я думаю, что проблема может заключаться в том, что 2015-02-01 просто не является допустимым форматом даты, поскольку я не смог найти его на веб-сайте SAS, но я бы не стал менять всю таблицу целиком. </p>

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

@ Том предлагает вам в комментариях, как использовать дату, и дает очень хороший ответ, как ее эффективно использовать, что менее подвержено ошибкам, чем ввод значений. Я просто помещаю то же самое в оператор вставки.

proc sql;
create table date_table
(cvmo char(6), next_beg_dt DATE);
quit;

proc sql;
  insert into date_table 
values ('201501', "01FEB2015"D)
;
0 голосов
/ 08 ноября 2018

Литералы даты (константы) - это строки в кавычках с буквой d сразу после закрывающей кавычки. Строка должна иметь формат, допустимый для DATE informat.

'01FEB2015'd
"01-feb-2015"d
'1feb15'd

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

data data_table ;
  length cvmo $6 next_beg_dt 8;
  format next_beg_dt yymmdd10.;
  do _n_=1 to 4;
    cvmo=put(intnx('month','01JAN2015'd,_n_-1,'b'),yymmn6.);
    next_beg_dt=intnx('month','01JAN2015'd,_n_,'b');
    output; 
  end;
run;

enter image description here

...