Whitespace 需要在SAS变量中填充空格

Whitespace 需要在SAS变量中填充空格,whitespace,sas,Whitespace,Sas,我有点吃惊 我有一个SAS变量,它的值具有不同的长度 如果变量所需的内存低于阈值(48字节),我可以向变量添加空格,使其达到内存分配 在SAS中我将如何做到这一点 更重要的是,在哪里可以找到有关SAS中单个空白(或任何其他字符/类型)占用的内存的文档 编辑: 史蒂夫帕斯泰兰的回答其实很完美:)我想不出在什么情况下你会想这么做。你能解释一下为什么要启发我们吗。同时,这将为您提供所需的: 除非我误读了,否则伊奇是对的。它们是固定长度的变量,因此当存储在内存中时,20字节的长度将占用20字节 如果需

我有点吃惊

我有一个SAS变量,它的值具有不同的长度

如果变量所需的内存低于阈值(48字节),我可以向变量添加空格,使其达到内存分配

在SAS中我将如何做到这一点

更重要的是,在哪里可以找到有关SAS中单个空白(或任何其他字符/类型)占用的内存的文档

编辑:
史蒂夫帕斯泰兰的回答其实很完美:)

我想不出在什么情况下你会想这么做。你能解释一下为什么要启发我们吗。同时,这将为您提供所需的:

除非我误读了,否则伊奇是对的。它们是固定长度的变量,因此当存储在内存中时,20字节的长度将占用20字节

如果需要填充值,可以使用重复功能:


SAS中的字符变量会自动向右填充以填充其长度,但是,某些语句(如PUT语句)在显示时可能会对其进行修剪

可以使用格式强制输出,例如:

data test;
    length x $ 8;    

    x = "XX";   
    put "1) " x     "END"; /* Omitting the format will trim the printed variable value */    
    put "2) " x $8. "END"; /* Now it's shown as right-padded */


    x = "123456789";       /* The extra character is truncated from the variable */
    put "3) " x $8. "END";             
    put "4) " x $9. "END"; /* increasing format width will add extra right padding */
    put "5) " x $6. "END"; /* A shorter format will truncate the display */
run; 
将以下内容写入SAS日志:

1) XX END
2) XX      END
3) 12345678END
4) 12345678 END
5) 123456END

您能展示一些示例数据和/或代码吗?SAS中的变量总是有一个固定的长度,所以当你说变量不同时,你可能是在谈论字符数据,并且它们已经填充了空格。你是否尝试将变量格式化为预定长度,例如:“格式化变量名称$20;”?另外,您使用的是哪种操作系统需要这个?另外,空格字符与其他字符一样,只占用一个字节。在存储方面,空格并没有什么特别之处。很好的解释…为什么有些示例,如ex1,在变量和文本(“END”)之间创建了一个空格…但是ex3消除了这个空格?put语句的不同形式。列表输出在写入变量值和字符串时使用不同的间距方法。当使用列表输出写入变量时,SAS自动插入空格。输出指针停在变量值后面的第二列。但是,当写入字符串时,SAS不会自动插入空格空格。输出指针停在紧跟字符串中最后一个字符后面的列上。“与之相反:对于格式化输出,PUT语句使用变量名后面的格式写入每个值。SAS不会自动在值之间添加空格。如果该值使用的列少于指定的列,则在格式宽度指定的字段中,字符值将左对齐,数值将右对齐。“@stevepastelan字符可能需要大于1字节的内存,具体取决于编码。Unicode字符可能需要每个字符最多4个字节。此外,如果SAS使用以null结尾的字符串,则需要额外的字节等。。。我不知道这在SAS中是如何翻译的。您必须在内存中存储一个unicode字符,然后使用下面我的答案中的调用例程来确定这一点。这是客户端的一些要求。我对细节非常模糊,但我认为他们有一些基于每个变量的内存大小的标准加密/解密功能,这进一步反馈到基于此的不同系统中。