SAS 数据导入问题

SAS 数据导入问题,第1张

数据导入导出常见的需求,在我个人的成长过程中,只就SAS base、 SAS EM这两个说一下。

base导入:

(1) SAS表导入: data outnameset  databaserun

(2)  外部数据: proc import out= datafile="" dbms=excel  replacerun(replace不是必须)

(base导入数据中包含非法字符等,可扩展一下SAS默认的命名规则。 方法是:options validvarname=any)

EM导入:

(1) SAS表导入:文件-新建-逻辑库,为数据集创建一个逻辑库;(2)数据源(鼠标右击)-创建数据源,根据SASd出的对话框一步步进行。注:EM只能是SAS表,因此,其他来源的数据需先转化成SAS格式,在转化格式时,我遇到一个问题是excel表中,字段名为中文字符、中文空格、非法字符时,导出的表格是无法正确导入的。编码字符通常情况下是英文、数字和_ 。

SAS默认的是V7。其规则是:·最长32字符;·首字符可以拉丁字母和下划线,后继的字符可是字母和下划线,还有数字符号;·末尾空格忽略,且左对齐;·中间不能包含空格和特殊字符(下划线除外);·字符大小写均可,不作区分;·不能为SAS自动变量,如_N_、_ERROR_等;

(2)  外部数据导入:抽样-外部文件-导入文件

如果40多个变量只需要添几个到另一数据集,用KEEP STATEMENT 保留你要的变量1 变量2:

data work.datatemp (KEEP = variable1 variable2)

SET sas.datastored

run

如果40多个变量要添大多数的变量名到另一数据集,用DROP STATEMENT 舍掉你不要的变量3 变量4:

data work.datatemp (DROP = variable3 variable4)

SET sas.datastored

run

您可以使用_N_系统变量来为每一行数据添加一个序列号。以下是一个示例代码:

bash

Copy code

data a

set a

seq = _N_

run

这将在数据集 a 中添加一个名为 seq 的新列,并为每行数据分配一个序列号。_N_系统变量代表数据集中的当前观察行号。

请注意,如果您希望在运行多个 data 步骤时保留观察行号,则必须使用 retain 语句。以下是一个带有 retain 语句的示例代码:

bash

Copy code

data a

retain seq 0

set a

seq + 1

run

此代码将在 a 中添加一个名为 seq 的新列,并为每行数据分配一个递增的序列号。在第一行,将使用 retain 语句将 seq 初始值设置为 0,并保留该值。在每一行,seq 将加 1,并将新值保留在下一行使用。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11610093.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存