总之,我会说这取决于你的方法。在上述链接中的 SAS/Access 9.2 文档第 1 章的第二页上,SAS/ACCESS 工具有两种方法(在较旧的 DBLOAD 过程中):
- LIBNAME 引用 -将 SAS 库引用分配给 DBMS 对象,例如模式和数据库;然后,您可以像使用 SAS 数据集一样使用表或视图...您可以在任何引用 DBMS 数据的 libref 上使用诸如 PROC SQL 或 DATA 步编程之类的 SAS 过程。
- SQL Pass-through 工具- 使用其本机 SQL 语法与数据源交互,而无需离开您的 SAS 会话。SQL 语句直接传递给数据源进行处理... DBMS 优化器可以利用 DBMS 列上的索引来更快、更有效地处理查询
因此,对于第一种方法,SAS 处理处理,而第二种方法 DBMS 处理处理。与连接到外部 RDMS 源的大多数客户端(Java、C#、Python 脚本或 PHP 网页)一样,除非明确使用直接 ODBC/OLEDB 或其他 API 连接并发送请求,否则处理在前端处理(即计算参数)最终结果通过事务更新到后端。在指定的会话期间,所有 SAS 的库都将存在于内存(或临时硬盘)中,并且取决于代码自己处理数据并将结果传递给外部源或将数据处理完全传递给另一个源。
比较示例:Microsoft Access
一个很好的比较示例是 Microsoft Access,它与 SAS 一样也为任何符合 ODBC 的 RDMS(包括 SQL Server、Oracle、MySQL 等)提供链接表连接和直通查询。将 Access 标记为数据库通常是用词不当实际上,它是一个 GUI 程序和对象集合,其中之一是默认的Windows JET/ACE 引擎(一个 .dll 文件),它完全不限于 Access,而是可用于所有 Office 程序。请注意世界默认值,因为它可以切换到任何 ODBC 数据库源。
链接表本质上是 Access GUI 对象(特别是特殊的 tabledefs),这与 SAS 的 libname refs 不同,后者被加载到 JET/ACE 表容器中,数据指向外部。然后可以像使用任何其他 Access 本地表一样使用链接表,并使用任何 ACE SQL 方言。这个特殊的链接表(很像 SAS 的 libname refs 是由 ODBC 或其他连接类型建立的)指向外部源,驱动程序为迁移操作转换查询命令。因此,完全相同的 Access 链接表查询的执行方式可能与相同的 RDMS 查询不同。
比喻
我想 SAS 的行为方式相同,并且作为前端存在,libname ref 作为带有指向后端的指针的本地对象。所有数据步骤处理都在本地处理,并且引擎只需导入或提取结果集。打个比方。数据库是家,而 SAS 是垃圾人、家居装饰师或搬入帮手。SAS(如 Java 的 JDBC、PHP 的 PDO、Python 的游标、R 的库)敲开了数据库回答的门(被这么多请求惹恼了)。“嘿,伙计,我们需要倒垃圾,这里是确切的物品......或者我们需要改造地下室,这里是确切的规格......或者我们有新家具要添加到卡车上准备下车...签署凭据后,请立即执行。” 和两者一样,传递方法是在后端引擎上执行的请求。所以 SAS 留下指令,也许是门上的一张纸条(不准确)供房主执行。