SAS使用proc sql插入值

时间:2017-07-11 15:54:24

标签: sas proc-sql

所以我有一个相当有趣的问题。我试图以特定的格式和样式插入当前日期,但由于某种原因它似乎失败了。我知道它不是格式问题...但是idk如何修复它。数据步骤解决方案也受到欢迎......这是有效的。

proc sql;
create table work.test
(test_Id char(50), test_Name char(50), cur_Mo char(1), cur_Qtr char(1), entered_Date char(8));
insert into work.test 
values('201703','2017 Mar','0','0','24APR17')
values('201704','2017 Apr','0','0','24APR17')
values('201706','2017 Jun','1','0','23JUN17');
quit;

这里没有:

proc sql;
    insert into work.test 
    values(catx('',put(year(today()),4.),case when month(today())< 10 then catx('','0',put(month(today()),2.)) else put(month(today()),2.)end) ,catx(' ',[put(year(today()),4.),put(today(),monname3.))],'1','0',put(today(),date7.));
quit;

2 个答案:

答案 0 :(得分:2)

您可以使用%SYSFUNC()宏函数在宏代码中调用大多数其他SAS函数。因此,要以DATE7格式生成今天的日期,您可以使用:

insert into work.test (date)
  values("%sysfunc(date(),date7)")
;

答案 1 :(得分:1)

我可能这样做的方法是使用数据步骤来制作要插入的数据集,然后插入该数据集。

您可以在SAS中使用insert into (...) select (...) from (...)语法,并且数据步骤更灵活,允许您定义列。

例如:

proc sql;
  create table class like sashelp.class;
quit;

proc sql;
   insert into class
     select * from sashelp.class;
quit;

或者您只能指定某些变量:

proc sql;
    insert into class (name, age)
      select name, age from sashelp.class;
quit;



data to_insert;
  name= 'Wilma';
  sex = 'F';
  age = 29;
  height = 61.2;
  weight = 95.3;
run;

proc sql;
  insert into class
    select * from to_insert;
quit;

请确保您明确列出要插入/选择的变量,或者您的订单完全正确(如果您像上面一样使用*,则按位置匹配)。