我可以在SAS中设置数据集之间的关系吗?

时间:2015-06-25 04:59:17

标签: sas

我正从关系数据库和新的SAS转移到SAS。现在我需要将几个CSV文件导入SAS,这些文件之间存在关系。就像数据库中表之间的关系一样。我想知道,SAS中是否存在相同的概念,例如我需要设置的外键,或者我是否应该直接导入这些文件而不管关系,因为SAS中没有这样的东西?

2 个答案:

答案 0 :(得分:1)

由于您的脑中存在外键的概念,因此它也存在于SAS中。但它(通常)不是"支持的属性"您实际上用于标记数据字段。就必须进行大量前期数据定义而言,SAS的开销很低,尤其是对于临时工作。

只需按原样导入文件。

来自关系数据库,你应该看看" proc SQL"作为最快的&在SAS中使用数据操作技能的最佳方式。

答案 1 :(得分:1)

在SAS中,你有Integrity Constraint的概念,正如评论中提到的mjsqu。这是你如何强制数据集之间的关系。它使用起来非常简单,对于来自强大SQL背景的人来说,语法应该比较熟悉。

完整性限制包括:

  • 检查(写入数据集的有效值列表)
  • 非空(可能没有缺失值)
  • 唯一(可能没有重复值)
  • 主键
  • 外键(也称为“引用约束”,因为它是唯一一个检查另一个表的方法)

以下是SAS的一些完整性约束的实例:

proc sql;
  create table employees (
    employee_id num primary key,
    name char(16),
    gender char(1),
    dob num format=date9.,
    division num not null);
  create table division_table (
    division num primary key,
    division_name char(16)
    );
  alter table employees
    add constraint gender check(gender in ('M','F'))
    add constraint division foreign key(division) references division_table
        on delete restrict on update restrict;
  *this insert fails because of Division not containing a value for 1;
  insert into employees (employee_id,name,gender,dob,division) values (1,'Johnny','M','06JAN1945'd,1);

  insert into division_table (division,division_name) values (1,'Division 1');
  *Now it succeeds;
  insert into employees (employee_id,name,gender,dob,division) values (1,'Johnny','M','06JAN1945'd,1);
quit;

您还可以在PROC DATASETS中添加约束,这对SAS用户来说会更为熟悉(对于那些不熟悉SQL的人来说,语法可能稍微容易一些)。