如何使用列的默认值创建SAS数据集?

时间:2016-02-17 21:47:36

标签: sas

就像在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

2 个答案:

答案 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;