【问题标题】:SAS 9.3 Invalid data for variableSAS 9.3 变量的无效数据
【发布时间】:2013-09-16 13:40:54
【问题描述】:

我在 SAS 中的程序正常运行时遇到问题。我从文件中获取数据的方式出了点问题,它弄乱了里面的一切。这是我的代码混乱的部分:

    data Stocks;        
    infile 'location of file.txt';
    input   @1  Stock       :   $4.
            @5  PurDate     :   mmddyy10.
            @15 PurPrice    :   dollar6.1
            @21 Number      :   4
            @25 SellDate    :   mmddyy10.
            @35 SellPrice   :   dollar6.1;

            TotalPur = Number * PurPrice;
            TotalSell = Number * SellPrice;
            Profit = TotalSell - TotalPur;
run;

proc print data=Stocks;
    var Stock PurDate PurPrice Number SellDate SellPrice TotalPur TotalSell Profit;
run;

这是我正在处理的数据:

IBM  5/21/2006 $80.0 10007/20/2006 $88.5
CSCO04/05/2005 $17.5 20009/21/2005 $23.6
MOT 03/01/2004 $14.7 50010/10/2006 $19.9
XMSR04/15/2006 $28.4 20004/15/2006 $12.7
BBY 02/15/2005 $45.2 10009/09/2006 $56.8

数据说明如下:

Stock --> Starting Column: 1, Length: 4, Type: Char.
PurDate --> Starting Column: 5, Length: 10, Type: mm/dd/yyyy.
PurPrice --> Starting Column: 15, Length: 6, Type: Dollar Signs and Commas.
Number --> Starting Column: 21, Length: 4, Type: Num.
SellDate --> Starting Column: 25, Length: 10, Type: mm/dd/yyyy.
SellPrice --> Starting Column: 35, Length: 6, Type: Dollar Signs and Commas.

每次我运行它时,它都会告诉我,“注意:数字的无效数据”对于每一行。它会关闭我的所有数据(例如日期值等)。我知道我的计算变量将不起作用,因为它们依赖于未正确获取的 Number 数据。我会很感激人们能给我的任何方向。

【问题讨论】:

    标签: sas


    【解决方案1】:

    去掉所有的冒号(:)。
    然后在数字的 4 之后添加一个点 ( . ) 以明确它是一个信息。
    这应该可以解决问题。

    【讨论】:

    • 确实如此。为了使答案更加充实:列表输入需要冒号,而不是列输入。不要混淆两者!列表主要用于分隔输入(即空格、逗号等列表);固定列应与列(@1 varname informat.)一起阅读。
    • 感谢您对@Shorack 的建议以及您对 Joe 的使用说明,这非常有用且有效!玩弄,我碰巧在 4 旁边放了一个 $ 符号,在给它一个字符属性之后加上一个句号,出于某种原因,它也起作用了,但我对它的理解只会让我更加困惑,所以在听从你的建议之后,这一切都让现在对我来说更有意义了。
    • $ 使它成为字符变量,而不是数字变量。这几乎肯定会覆盖任何信息错误(因为字符变量非常灵活),但不一定会给您正确的结果。 :)
    【解决方案2】:

    您需要明确告诉它要获取 Number 的列。否则它会尝试读取以下日期的一部分。

    data Stocks;        
    infile x;
    
    input   @1  Stock       :   $4.
            @5  PurDate     :   mmddyy10.
            @16 PurPrice    :   dollar6.1
            @22 Number      22-24
            @25 SellDate    :   mmddyy10.
            @36 SellPrice   :   dollar6.1;
    
    format PurDate SellDate date9.;
    
            TotalPur = Number * PurPrice;
            TotalSell = Number * SellPrice;
            Profit = TotalSell - TotalPur;
    run;
    

    【讨论】:

    • 另外,您的某些行指针已关闭,这表明它们已更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2013-05-01
    相关资源
    最近更新 更多