SAS中字符数据的编号范围列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS中字符数据的编号范围列表相关的知识,希望对你有一定的参考价值。
我正在尝试创建变量Cap1到Cap6。我不确定如何将它们作为字符数据读取。我的代码是:
DATA Capture;
INFILE '/folders/myfolders/sasuser.v94/Capture.txt' DLM='09'x DSD MISSOVER FIRSTOBS=2;
INPUT Sex $ AgeGroup $ Weight Cap1 - Cap6 $;
RUN;
而我的问题是Cap1到Cap5被解释为数值数据。我该如何解决这个问题?
您的问题很简单:您使用的是变量列表,但是您没有将$应用于整个变量列表!您需要在列表周围使用( )
并将修改器应用于整个列表。
看到:
DATA Capture;
INFILE datalines DLM=' ' DSD;
INPUT Sex $ AgeGroup $ Weight (Cap1 - Cap6) ($);
datalines;
M 18-34 135 A B C D E F
F 35-54 115 G H I J K L
;;;;
RUN;
Indeed,
我也希望这个输入语句像你一样工作,但事实并非如此。正如此日志所示,在$
之后放置Cap1
也无法解决问题。
26 INPUT Sex $ AgeGroup $ Weight Cap1 $ - Cap6 $;
_
22
ERROR 22-322: Expecting a name.
You can solve it
通过在读取变量之前为变量指定格式,例如format Cap1 - Cap6 $2.;
To test it,
我将数据包含在源文件中,即使用datalines
DATA Capture;
INFILE datalines DLM='09'x DSD missover FIRSTOBS=1;
format Sex $1. AgeGroup $9. Weight 8.2 Cap1 - Cap6 $2.;
INPUT Sex AgeGroup Weight Cap1 - Cap6;
datalines;
M 1-5 24.5 11 12 13 14 15 16
M 6-10 34.2 21 22 23 24 25 26
;
proc print;
proc contents;
RUN;
How to understand this:
SAS最初是作为非开发人员(i.c.统计学家)的编程语言而创建的,他们更不关心数据格式,因此SAS为您做了很多猜测(如果你不使用option explicit
,就像VBA一样)。
因此,当您第一次在data
步骤中提及变量名称时,SAS会向程序数据向量(PDV)广告一个变量,其中包含适当的类型(数字或字符)和长度,但这是猜测工作。
例如:作为测试数据集中的第一个学生CLASS
包括在SAS的标准安装中是男性,
data WORK.CLASS;
set sasHelp.CLASS;
select (sex);
when ('M') gender = 'male';
when ('F') gender = 'female';
otherwise gender = 'unknown';
end;
run;
您可以通过指示sas预先将变量添加到PDV来纠正此问题。
对于字符变量,
format myName $20.;
和length myName $20.;
是等价的informat myName $20.;
也差不多。
(但是,用户定义的格式使故事变得更加复杂。)
对于数字,有一个巨大的差异:
length mySize 8.;
在PDV中为mySize保留了8个字节format mySize 8.;
告诉SAS打印或显示最多8位数且没有小数的mySizeinformat mySize $20.;
在阅读mySize时告诉SAS a期望8位数,不带小数。
数字只能有一定的长度,具体取决于操作系统。在窗户上
8.
是默认值,对应于大多数数据库的double4.
对应一个浮点数3.
是我用于布尔值的最小值
格式可能非常不同
format mySize 8.3;
告诉SAS使用8个字符打印mySize,包括3个小数(如果它有一个正值,则在小数点之前留出最多4个小数的空间。将打印更少的小数以显示更大的数字)format mySize 8.3;
告诉SAS读取mySize,假设最后3位小数是分数,所以12345678
将被解释为12345.678
然后有特殊的格式来读取和写入日期,时间等以及用户定义的值和图片格式,但这导致我太过分了。
以上是关于SAS中字符数据的编号范围列表的主要内容,如果未能解决你的问题,请参考以下文章
在宏内部使用变量内部数据集名称时,SAS语法错误22和200