我试图创建变量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被解释为数值数据。我该如何解决这个问题?
答案 0 :(得分:3)
您的问题很简单:您使用的是变量列表,但您并未将$应用于整个变量列表!您需要在列表周围( )
和修改器将其应用于整个列表。
请参阅:
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;
答案 1 :(得分:2)
我也希望这个输入语句像你一样工作,但事实并非如此。在$
之后放置Cap1
也无法解决此问题,如此日志所示。
26 INPUT Sex $ AgeGroup $ Weight Cap1 $ - Cap6 $;
_
22
ERROR 22-322: Expecting a name.
在阅读变量之前为变量指定格式,例如format Cap1 - Cap6 $2.;
我将数据包含在源文件中,即使用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;
SAS最初是作为非开发人员(ic统计学家)的编程语言而创建的,他们不关心数据格式,所以SAS为你做了很多猜测工作>(就像VBA一样,如果你不使用option explicit
)。
因此,当您第一次在data
步骤中提及变量名称时,SAS会向程序数据向量(PDV)广告一个变量,其中包含适当的类型(数字或字符)和长度,但这是猜测工作。
例如:由于SAS标准安装中包含的测试数据集CLASS
中的第一个学生是男性,
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 for mySize format mySize 8.;
告诉SAS打印或显示最多8位且没有小数的mySize informat mySize $20.;
告诉SAS在阅读mySize时期望8位数字,不带小数。 数值只能有一定的长度,具体取决于操作系统。在窗口
8.
是默认值,对应于大多数数据库中的double 4.
对应一个浮动3.
是最低限度,我用于布尔值格式可能非常不同
format mySize 8.3;
告诉SAS使用8个字符打印mySize,其中包括小数的3位小数(如果小数点为正值,则会在小数点前留出最多4位小数的空间。小数字将减去打印以显示更大的数字) format mySize 8.3;
告诉SAS读取mySize,假设最后3位小数是分数,因此12345678
将被解释为12345.678 然后有特殊格式来读取和写入日期,时间等以及用户定义的值和图片格式,但这导致我太过分了。