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

我可以在SAS中设置数据集之间的关系吗?,sas,Sas,我正从关系数据库转向SAS。现在我需要将几个CSV文件导入SAS,这些文件之间存在关系。就像数据库中表之间的关系一样。我想知道,SAS中是否存在相同的概念,例如我需要设置的外键,或者我是否应该直接导入这些文件,而不管它们之间的关系如何,因为SAS中没有这样的东西?既然外键的概念存在于您的头脑中,它也存在于SAS中。但(通常)它不是您实际用于标记数据字段的“受支持的属性”。SAS的开销很低,因为它需要进行大量的前期数据定义,特别是对于临时工作 只需按原样导入文件即可 对于关系数据库,您可能应该将“

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

既然外键的概念存在于您的头脑中,它也存在于SAS中。但(通常)它不是您实际用于标记数据字段的“受支持的属性”。SAS的开销很低,因为它需要进行大量的前期数据定义,特别是对于临时工作

只需按原样导入文件即可


对于关系数据库,您可能应该将“procsql”视为在SAS中使用数据操作技能的最快、最好的方法

在SAS中,您有的概念,如评论中提到的mjsqu。这就是如何加强数据集之间的关系。它的使用非常简单,并且对于具有强大SQL背景的人来说,语法应该相对熟悉

完整性约束包括:

  • 检查(写入数据集的有效值列表)
  • Not Null(可能没有缺少的值)
  • 唯一(可能没有重复的值)
  • 主键
  • 外键(也称为“引用约束”,因为它是唯一检查另一个表的约束)
以下是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的用户来说,语法可能会稍微简单一些)。

SAS有一个称为完整性约束的等效概念。您的意思是,引用完整性在SAS中不是很重要吗?不,他说SAS不像其他RDBMS中那样具有严格的模式,但您可以在查询中设置关系,并为每个文件(特别是主密钥和外键)设置完整性约束SAS与许多其他产品一样,多年来添加了无数的Whists和Bell,内置的引用完整性约束是最近出现的特性之一。从历史上看,OLTP类型的应用程序需要引用完整性约束,而不是分析用途,因为分析用途通常不是数据的主要(原始)存储位置。使用SAS构建OLTP可能不是使用最好的工具。