0

我是 SAS 4GL 的新手……

是否可以从表中提取哪些列是主键或复合主键的一部分?我需要将它们的值合并到输出数据集的一列中。

问题是,作为输入,我可以获得不同的表格,但我不知道他们的定义。

4

1 回答 1

4

如果定义了索引,那么您可以找出该索引中使用了哪些变量。参见例如:

data blah(index=(name));
set sashelp.class;
run;

proc contents data=blah out=blahconts;
run;

blahconts有表明它name在一个简单索引中的列,并且它总共有 1 个索引。

此外,您可以使用外键约束,例如此 SAS 文档示例中的以下内容:

proc sql;
   create table work.mystates
      (state      char(15), 
       population num,
       continent  char(15),

          /* contraint specifications */
       constraint prim_key    primary key(state),
       constraint population  check(population gt 0),
       constraint continent   check(continent in ('North America', 'Oceania')));      

   create table work.uspostal
      (name      char(15),
       code      char(2) not null,          /* constraint specified as    */
                                            /* a column attribute         */

       constraint for_key foreign key(name) /* links NAME to the          */
                  references work.mystates   /* primary key in MYSTATES    */

                     on delete restrict     /* forbids deletions to STATE */
                                            /* unless there is no         */
                                            /* matching NAME value        */

                     on update set null);   /* allows updates to STATE,   */
                                            /* changes matching NAME      */
                                            /* values to missing          */ 
quit;

proc contents data=uspostal out=postalconts;
run;
proc sql;
describe table constraints uspostal;
quit;

这会将约束信息写入输出窗口。从输出数据集中,您可以看到变量在一个简单的索引中。您可以在 ODS OUTPUT 中包装这些(PROC CONTENTSDESCRIBE TABLE CONSTRAINTS)中的任何一个,以将信息获取到数据集:

ods output  IntegrityConstraints=postalICs;
proc contents data=uspostal out=postalconts;
run;
ods output close;

或者

ods output  IntegrityConstraints=postalICs;
proc sql;
describe table constraints uspostal;
quit;
ods output close;
于 2014-03-31T13:50:53.213 回答