首页 文章

SAS在输入期间重命名变量

提问于
浏览
0

这里是自学成才的SAS用户 .

我经常使用我几乎无法控制的数据集,并在几个不同的用户之间共享 .

我通常使用infile语句将文件读取为CSV,这些语句使用信息块,格式和输入语句来定义变量 . 在此过程中,我可以继续重命名变量 - 前提是所有内容都以正确的顺序重命名 - 或者它们是否必须与原始数据集匹配并在以后的数据步骤中重命名?

例如,数据集中的变量名称为“100%完全付款” . 我知道SAS变量不能以数字开头,我也想简化一般的变量名,所以我可以做如下的事情:

infile statement...
informat Paid $3.;
format Paid $3.;
input Paid $;
run;

或者也许我的效率非常低 . 我已经尝试过没有这整个信息/格式/输入业务的简单proc导入,但是我发现尝试重新定义变量类型之后会让我更加头疼(我使用的所有数据集都有文本,美元,百分比,一般数字,日期......) . 在任何情况下,其他提示高度赞赏 - 谢谢!

编辑

也许我应该问的问题是:有没有办法保持csv的格式为美元和百分比(通过proc导入,似乎将这些转换为字符)?我知道我可以在导入文件之前手动将格式从美元/百分比更改为Excel中的“常规”,但我更愿意避免使用其他手动步骤,也因为我确实希望将这些格式保留为美元和百分比 . 或者我最好做信息/格式/输入以指定csv的数据类型,以便准确读取变量我希望它们被读入的方式?

注意:我无法处理导入xls或xlsx文件,因为我在64位计算机上和/或我缺少必需的驱动程序(或两者兼而有之) . 即使在32位计算机上也无法做到这一点 .

1 回答

  • 2

    CSV文件不包含有关变量类型的任何元数据,因为有关尝试将其导入Excel的说明 . 您可以使用PROC IMPORT让SAS对如何阅读它们做出有根据的猜测,但根据恰好出现的特定数据值,答案可能因文件而异 .

    如果您有XLS或XLSX文件中的数据,您应该能够使用带有XLS或XLSX引擎的libname将它们直接读入SAS . 这不使用Excel,因此在32和64安装之间没有任何冲突 . 实际上你甚至不需要安装Excel . SAS将比从CSV文件更好地确定Excel文件中的变量类型,但由于Excel是一个自由格式的电子表格,因此对于多个文件中的同一变量,您可能仍然没有一致的变量类型 . 使用Excel电子表格,您甚至可能在单个工作表的单个列中始终具有相同的数据类型 .

    您最好编写自己的数据步骤来读取文件 . 这样你就可以强制实现一致性 .

    给定CSV文件时我通常做的是从第一行复制名称并使用它来创建 LENGTH 语句 . 这将定义变量并设置变量的顺序 . 您可以在此时为变量赋予新名称 .

    length paid $3 date amount 8 ;
    

    然后,对于需要正确读取INFORMAT的变量,我添加一个 INFORMAT 语句 . 通常只需要日期/时间变量,但如果数值包含逗号或百分号,则可能还需要它 . 如果您的CSV文件的数字格式为$和/或千位分隔符,则 DOLLAR. informat非常有用 .

    informat date mmddyy. amount dollar. ;
    

    然后,对于需要正确显示FORMAT的变量,我添加一个 FORMAT 语句 . 通常只需要日期/时间变量 . 如果要附加$ CHAR,则只需要字符变量 . 格式以保留前导空格 .

    format date yymmdd10. ;
    

    然后 INPUT 语句非常简单,因为您可以使用位置变量列表 . 请注意,由于类型已由LENGTH语句定义,因此无需在INPUT语句中包含informats或$ .

    input paid -- amount ;
    

相关问题