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;

导致将“女性”截断为四个位置:enter image description here

您可以通过指示sas预先将变量添加到PDV来纠正此问题。

对于字符变量,

  • format myName $20.;
  • length myName $20.;是等价的
  • informat myName $20.;也差不多。

(但是,用户定义的格式使故事变得更加复杂。)

对于数字,有一个巨大的差异:

  • length mySize 8.;在PDV中为mySize保留了8个字节
  • format mySize 8.;告诉SAS打印或显示最多8位数且没有小数的mySize
  • informat mySize $20.;在阅读mySize时告诉SAS a期望8位数,不带小数。

数字只能有一定的长度,具体取决于操作系统。在窗户上

  • 8.是默认值,对应于大多数数据库的double
  • 4.对应一个浮点数
  • 3.是我用于布尔值的最小值

格式可能非常不同

  • format mySize 8.3;告诉SAS使用8个字符打印mySize,包括3个小数(如果它有一个正值,则在小数点之前留出最多4个小数的空间。将打印更少的小数以显示更大的数字)
  • format mySize 8.3;告诉SAS读取mySize,假设最后3位小数是分数,所以12345678将被解释为12345.678

然后有特殊的格式来读取和写入日期,时间等以及用户定义的值和图片格式,但这导致我太过分了。

以上是关于SAS中字符数据的编号范围列表的主要内容,如果未能解决你的问题,请参考以下文章

交织 SAS 数据集(按常见患者编号)

SAS中数据的导入(1)

在宏内部使用变量内部数据集名称时,SAS语法错误22和200

将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener

提供来自 Main 组的子类型列表以及范围编号

SAS 对变量进行组内编号、循环编号、递增编号和有限重复循环编号