就像在SQL表中一样,我想创建一个具有某些列的默认值的数据集。因此,当我将数据(除默认之外的其他列)插入到该表时,默认列应该获得默认值。 目的:基本上,SAS流程创建SAS数据集结构,Java流程从上游接收值并插入到该数据集中。如果java进程没有收到任何列的值,那么我们尝试使用默认值填充该列。 有点像这样:
create table1 (field1 num,
field2 num default 5557,
field3 num default 1337,
field4 date default today())
INSERT INTO table1 (field1, field3) VALUES (5, 10);
INSERT INTO table1 (field1, field2, field3) VALUES (4, 7, 9);
Output:
field1 field2 field3 field4
5 5557 10 17FEB2016
4 7 9 17FEB2016
答案 0 :(得分:2)
SAS不支持数据集中变量的默认值。但SAS宏确实支持宏参数的默认值。您可以创建一个为您生成INSERT
语句的宏。
%macro add_record
(field1=.
,field2=5557
,field3=1337
,field4=%sysfunc(today())
);
insert into table1 (field1,field2,field3,field4)
values (&field1,&field2,&field3,&field4)
;
%mend add_record ;
首先创建你的表。
data table1;
length field1-field4 8 ;
format field4 yymmdd10.;
stop ;
run;
然后,您可以在PROC SQL步骤中调用宏来添加一些记录。
proc sql ;
%add_record(field3=10,field1=5);
%add_record(field1=4,field2=7,field3=9);
quit;
我们可以使用PROC PRINT查看结果。
proc print data=table1;
run;
答案 1 :(得分:0)
我认为SAS的proc sql中没有默认值选项。
https://communities.sas.com/t5/SAS-Procedures/Add-SAS-Table-Column-with-Default-Value/td-p/191848
我认为您的选择将是插入所有值,还是使用某种数据步骤。
data want;
/*Defaults*/
field1=.;
field2=5557;
field3=1337;
format field4 mmddyy10.;
field4=today();
array fields {3} field1-field3;
/*First Insert*/
field1=5;
field3=10;
output;
/*Reset to original values*/
field1=fields{1};
field2=fields{2};
field3=fields{3};
/*Second Insert*/
field1=4;
field2=7;
field3=9;
output;
run;