gpt4 book ai didi

sas - 为什么SAS字符域的长度是32767?

转载 作者:行者123 更新时间:2023-12-04 19:37:38 31 4
gpt4 key购买 nike

根据 The Little SAS Book,SAS 字符数据的长度可达 2^(15)-1。

那 1 个字符去哪儿了?通常在浮点运算中,我们会预留一个字节作为 float 的符号。 SAS 字符数据是否会发生类似情况?

最佳答案

我没有确定的答案,但我有一个假设。

我认为32,767的长度与字段本身无关; SAS 将其所有行(在未压缩的文件中)存储在相同大小的 block 中,因此不需要字段长度指示符或空终止符。 IE,在 SAS 数据集中,对于以下等效的数据步骤,您会得到类似的东西:

data want;
length name $8;
input recnum name $ age;
datalines;
01 Johnny 13
02 Nancy 12
03 Rachel 14
04 Madison 12
05 Dennis 15
;;;;
run;

你会有这样的东西。 header 当然不是那样写的,而只是打包的字节序列。

<dataset header>
Dataset name: Want
Dataset record size: 24 bytes
... etc. ...
<subheaders>
Name character type length=8
Recnum numeric type length=8
Age numeric type length=8
... etc. ...
<first row of data follows>
4A6F686E6E792020000000010000000D
4E616E6379202020000000020000000C
52616368656C2020000000030000000E
4D616469736F6E20000000040000000C
44656E6E69732020000000050000000F
<end of data>

变量直接相交,SAS 从子标题中的信息知道一个开始和一个停止的地方。 (当然,这只是一个 PUT 语句;如果我没记错的话,我认为在实际文件中首先存储整数;但想法是一样的。)

从技术上讲,.sas7bdat 规范不是公开披露的规范,但几个人已经弄清楚了文件格式的大部分工作原理。一些 R 程序员有 written a specification虽然阅读起来有点困难,但确实提供了一些信息。

表示用4个字节来指定字段长度,32767已经绰绰有余了(20亿也够了),所以这不是确定的答案;我想它可能最初是 2 个字节,后来在 SAS 开发的某个时候更改为 4 个字节,尽管 .sas7bdat 是一个相对最近创建的全新文件类型(版本 7,因此是 sas7bdat;我们现在是 9)。

另一种可能性,也许更有可能的是,在 1999 年之前,ANSI C 标准只要求 C 编译器支持至少 32767 字节的对象——这意味着编译器不必支持大于 32767 字节的数组。虽然它们中的许多确实支持更大的数组/对象,但 SAS 可能正在使用最低标准以避免不同操作系统和硬件实现的问题。参见 this discussion一些背景的 ANSI C 标准。也有可能是另一种语言的类似性质的限制(因为 SAS 使用几种不同的语言)在这里有问题。 [感谢 FriedEgg 提出了这个想法(离线)。]

关于sas - 为什么SAS字符域的长度是32767?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471314/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com