gpt4 book ai didi

csv - 在 SAS 中导入具有较长不同长度字段的 CSV 会浪费磁盘空间

转载 作者:行者123 更新时间:2023-12-02 21:00:19 24 4
gpt4 key购买 nike

我遇到的问题是,当我导入 CSV 文件时,我最终会得到巨大的临时文件(比输入文件本身大得多)。当对其中一些文件使用压缩时,我的空间减少了 99%,但我想知道是否有更好的方法来直接减少大小。我准备了一个简化的例子。我正在导入如下所示的 CSV:

FILENAME CSVFILE("c:\example.csv"); 
DATA CSVINPUT (COMPRESS=yes REUSE=yes);
INFILE CSVFILE DSD DLM ="," lrecl=15000;
INFORMAT multiplier 3.0;
INFORMAT A $char1000. ;
INFORMAT B $char2000. ;
INFORMAT C $char2000. ;
INFORMAT D $char1000. ;
INFORMAT E $char5000. ;
INFORMAT F $char4000. ;
INPUT multiplier
A $
B $
C $
D $
E $
F $ ;
RUN;

CSV 包含不同宽度的数据,A 列可能有 5 个字符,也可能有 1000 个字符。其他列类似。此外,其中一些列可能嵌入了空格。我不确定这是否对解决问题有帮助,但乘数决定了这些列的大小。以下是 CSV 数据文件格式的示例:

4,aaaa,bbbbbbbb,    cc  ,dddd,eeeeeeeeeeeeeeeeeeee,ffffffffffff
1,a,bb, ,d,eeeee,ffff
2,aa,bbbb,cc ,eeeeeeeeee,ffffffff

有什么方法可以更有效地导入这些数据,而不截断任何值(或空白,例如 C 列)?这似乎是一个需要解决的常见/简单问题,但我还没有找到有效的解决方案,所以任何正确方向的帮助将不胜感激!

最佳答案

SAS是一个固定宽度的数据库系统;它不像大多数 SQL 实现那样具有 varchar 的概念。这意味着对于任何给定的 SAS 数据集,列具有固定宽度(分配给它的存储字节数)。如果你想在一列(变量)中有时有 1 或 2 个字符,有时有 1500 个字符,则必须将 1500 分配给该列并处理浪费。它使 SAS 能够更快地访问数据(因为它的扇区数量是可预测的),但如果您的数据结构与上述类似,则会浪费大量空间。

OPTIONS COMPRESS=CHAR 是处理此问题的正确方法,因为它将压缩数据并删除浪费的空间。除了以某种方式重组数据以避免列浪费大量空间之外,这是您唯一真正的选择。

关于csv - 在 SAS 中导入具有较长不同长度字段的 CSV 会浪费磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23247860/

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