2014-03-31 78 views
0

我是全新的SAS 4GL ...SAS獲取表主鍵

是否可以從表中提取哪些列是主鍵或複合主鍵的一部分?我需要將它們的值合併到輸出數據集的一列中。

問題是,作爲一個輸入,我可以得到不同的表,我不知道他們的定義。

回答

4

如果定義了索引,那麼您可以找出在該索引中使用了哪些變量。參見例如:

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

proc contents data=blah out=blahconts; 
run; 

blahconts具有指示name是在一個簡單的索引,列,並且它具有1個索引總。

此外,您還可以有外鍵約束上,如this SAS documentation example如下:

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輸出(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;