SAS数字信息与长度

SAS数字信息与长度,sas,informat,Sas,Informat,我试图确定SAS是如何读取length语句,然后是informat语句的。我可能有误解,但我的印象是,数值变量的informat语句的工作原理如下: informat number 5.; 这将为变量编号提供informat5,允许5个数字填充它。例如,12345 但是,当我运行下面的程序时,我有一个9位数的数字987654321,其长度适合数字6,它将代表所有小于等于137438953472的数字 问:长度语句是否“覆盖”了informat语句,并允许所有9位数字填充变量号?在信息量为5的情

我试图确定SAS是如何读取
length
语句,然后是
informat
语句的。我可能有误解,但我的印象是,数值变量的
informat
语句的工作原理如下:

informat number 5.;
这将为变量编号提供
informat
5,允许5个数字填充它。例如,12345

但是,当我运行下面的程序时,我有一个9位数的数字987654321,其长度适合数字6,它将代表所有小于等于137438953472的数字

问:长度语句是否“覆盖”了
informat
语句,并允许所有9位数字填充变量号?在
信息量为5的情况下,如何将所有9位数字放入变量中

data tst;
input number;
length number 6;
informat number 5.;
datalines;
987654321
;
run;

proc print data=tst;
run;
基于此SAS文档:

w指定输入字段的宽度。范围:1-32


似乎
informat w.d
会像我第一次描述的那样工作,不允许所有9位数字都填充数字

变量的长度定义了值存储到磁盘时所占用的空间量。注:在运行数据步骤期间,所有数值均为双精度,长度小于8的截断仅在输出介质期间发生

信息是一个独立于长度的概念。Informat定义如何将传入值表示形式解释为SAS数值存储。输入值表示将是文本必须处理的内容;无论是读取文件的输入语句、处理键入值的VIEWTABLE字段编辑、例如网格单元编辑等等

格式是一个类似的独立概念,定义SAS如何为输出呈现数值;无论是PUT语句、VIEWTABLE行渲染、PROCs输出中的放置、EG网格单元,等等

解释

现在,这已经不成问题了,当在输入语句中显式声明时,informat将得到尊重:

data _null_;
  attrib number length=6 informat=5.;
  input number 5.;
  put 'NOTE: ' number=;
  datalines;
987654321
run;
===== LOG ===== 
NOTE: number=98765
而且,正如您所问,没有应用与informat相关的变量,也没有说明显式数字informat

data _null_;
  attrib number length=6 informat=5.;
  input number;
  put 'NOTE: ' number=;
datalines;
987654321
run;
===== LOG =====
NOTE: number=987654321
因此,第一个是指定格式的列表输入,第二个是简单的列表输入(因为没有指定格式)

简单的列表输入将接受一些大得离谱的数据,结果值虽然不精确,但将处于正确的指数级

data _null_;
  attrib number length=6 informat=5.;
  input number;
  put 'NOTE: ' number= ;
datalines;
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
run;
===== LOG =====
NOTE: number=1.2345679E89
输入语句、列表的文档说明了什么?当然,在没有指示的情况下,使用声明为informat的变量没有任何意义

简单列表输入

简单列表输入对输入的数据类型有几个限制 输入语句可以读取:

•默认情况下,输入值之间必须至少有一个空格。使用 infle语句中的DLM=或DLMSTR=选项或DSD选项 指定除空白之外的分隔符

•用一个句点表示每个缺失的值,而不是一个空格或两个句点 相邻分隔符

•字符输入值不能超过8字节,除非 变量在较早的长度、ATTRIB或 非正式声明

•除非更改,否则字符值不能包含嵌入空格 分隔符

•数据必须采用标准数字或字符格式。(脚注1)

脚注1:有关标准和非标准数据值的信息,请参见SAS语言参考:概念。(我的LOL)

“SAS变量属性”状态的概念

告密者

指SAS在读取数据值时使用的指令如果 未指定任何信息,默认信息为数字的w.d 变量,和$w。对于字符变量。您可以分配SAS informats到INFORMAT或ATTRIB语句中的变量。你可以 使用格式化过程为变量创建自己的信息

(粗体)

显然没有明确的默认值,比如32。或者是32强。因为超过32位的值将无误输入

那么文档是否解释了一些事情?是的,嗯,有点。外卖是什么:

  • 在简单列表输入过程中继承其信息的数值变量的人类直觉与实际执行的行为不一致。
    • 大量的现有SAS代码意味着实现这种直觉的改变是极不可能的
  • 简单的语句可以包含大量的概念和广泛的文档
  • 可能的变化是,文档将更新为更明确的简单列表输入警告

首先:
长度
不会覆盖或影响信息或读入<代码>长度
仅描述用于存储数字的字节数,仅此而已

对于数值变量,信息不能以直观的方式工作。我不知道为什么,但他们不知道

请参阅以下网站的报价:

对于字符变量,此格式修饰符从下一个非空列读取值,直到指针到达下一个空列、变量的定义长度或数据行的末尾,以先到者为准。对于数值变量,此格式修饰符从下一个非空列读取值,直到指针到达下一个空列或数据行的末尾,以先到者为准

在某种程度上,他们确实会听信息——在那里添加一个
.2
,你会得到一个强制的小数点——但他们不会听一个值读入多长时间。我不知道为什么;从直觉上看,他们应该这样做,但事实并非如此

下面是字符变量-它们尊重长度
data tst;
length number $9;
informat number $5.;
input number;
datalines;
987654321
;
run;

proc print data=tst;
run;