2017-04-06 40 views
0

这真的很奇怪,但我希望你能有所帮助。我使用在SAS 9.3数据步骤FILE语句导入别人的SPSS文件,这样我就可以重新编码,并创建一些变量,然后输出的文件。我没有使用INFILE运气,所以我使用了PROC IMPORT,然后将数据转换为txt格式。为什么我的输出文件包含充满我数据集变量的神奇额外列?

proc import datafile = 'C:\file.sav' 
    out = work.master_A 
    dbms = sav 
    replace; 
run; 

data work.master_B; 
    file 'C:\file.txt' 
     delimiter = '09'x 
     dsd 
     dropover 
     lrecl = 32767; 

    put 
     'animal' '09'x 
     'vegetable' '09'x 
     'mineral' '09'x 

    set work.master_A; 

     format animal $11.; 
     format vegetable $10.; 
     format mineral $8.; 

     put animal @; 
     put vegetable $ @; 
     put mineral @; 

run; 

我知道这应该是一个非常简单的任务。但是,无论我指定哪种类型的输出文件(.txt,.csv),输出文件都包含其他列。这些列没有变量名称/标题。但是,列单元格填充了数据列的名称。

例如,如果我的原始数据是: 动物植物矿物 猫西兰花石英 狗芦笋钻石 鸟榕页岩

输出数据是: 动物植物矿物 猫西兰花石英动物植物矿质动物植物矿物 狗芦笋钻石动物植物矿物动物植物矿物 鸟榕页岩动物植物矿物动物植物矿物

任何想法?

谢谢!

+0

您的第一个PUT语句缺少分号?这是一个错字还是你的实际程序没有结束PUT语句? – Tom

+0

PROC IMPORT是否真的与这个问题有关?这听起来像你只是想知道如何将数据集输出到CSV文件。 – Tom

回答

1

您的导入步骤看起来不错。您没有显示任何尝试转换任何变量,所以我们假设您做了正确的操作。

问题你描述听起来就像是重新写头的输入数据集的每一个观察值造成的。您需要将其限制为仅在数据步骤的第一次迭代中写入标题。

data _null_; 
    file 'C:\file.txt' dsd dlm='09'x; 
    if _n_=1 then put 
    'animal' '09'x 
    'vegetable' '09'x 
    'mineral' 
    ; 
    set master_A; 
    put animal vegetable mineral; 
run; 

您可以使用PROC EXPORT来编写分隔文件。

proc export data=master_A outfile='c:\file.txt' dbms=dlm; 
    delimiter='09'x; 
run; 

如果你想限制它只是那些三列,你可以只使用KEEP =数据集选项。

proc export data=master_A(keep=animal vegetable mineral) outfile='c:\file.txt' dbms=dlm; 
    delimiter='09'x; 
run; 
+0

谢谢,汤姆!是的,幸好这里缺少的分号只是一个错字。接得好!是的!这正是它所做的!任何想法为什么?我以前从来没有遇到过这种情况,而且我不知道发生了什么事情,这让我绝对疯狂。 PROC EXPORT是一个好主意,除了我真的需要为每个变量指定格式。那么,我想我可以使用上面三个选项中的第一个,添加语法来指定格式?感谢您的帮助和任何额外的见解!你真棒! – doctorjay

+0

的'IF _N_ = 1'测试将使其输出仅用于第一次通过数据步骤中的标题行。不知道你的格式意味着什么。 CSV文件没有格式。也许你根本不需要分隔文件?通常我删除任何附加到字符变量的格式。您可能需要将格式附加到DATE变量。你可以使用'format _character_;'将它们从字符中移除,或者使用'_all_'来移除所有。然后,您可以为日期和需要它们的东西添加格式。我发现使用YYMMDD10。日期使他们更便携。 – Tom

+0

噢,我的天啊!谢谢,汤姆!我不知道为什么我要大脑冻结并试图将格式分配给未格式化的文件类型!我只需要将格式应用于导出的xlsx文件。咄!对于为什么它重新为输入数据集的每次观察重新写入标题有任何想法?我从来没有遇到过这种情况。太感谢了! – doctorjay

相关问题