SAS 9.3变量的无效数据

SAS 9.3变量的无效数据,sas,Sas,SAS中的程序正常运行时出现问题。我从文件中获取数据的方式有问题,它把里面的一切都搞乱了。下面是我的代码混乱的部分: data Stocks; infile 'location of file.txt'; input @1 Stock : $4. @5 PurDate : mmddyy10. @15 PurPrice : dollar6.1

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.
每次我运行它时,它都会告诉我每行的“注意:数字的数据无效”。它会删除我的所有数据(比如日期值等等)。我知道我的计算变量不起作用,因为它们依赖于未正确获取的数字数据。我很感激人们能给我的任何指导。

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

去掉所有冒号(:)。
然后在数字的4后面加一个点(.)以表明它是一个信息。

这应该可以解决问题。

您需要明确地告诉它要获取数字的列。否则,它将尝试读取以下日期的一部分

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;

您需要明确地告诉它要获取编号的列。否则,它将尝试读取以下日期的一部分

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;

另外,你的一些线指针关闭了,这表明它们被纠正了。另外,你的一些线指针关闭了,这表明它们被纠正了。的确。为了进一步充实答案:列表输入需要冒号,而列输入不需要冒号。别把两者混淆了!列表主要用于分隔输入(即空格、逗号等列表);固定列应与列(
@1 varname informat.
)一起阅读。感谢您的建议@Shorack和您对使用Joe的解释,这非常有用,而且很有效!在玩游戏的时候,我碰巧在4旁边放了一个带句号的$符号,在给它一个字符属性之后,出于某种原因,这个符号也起了作用,但是我对它的理解让我更加困惑,所以在遵循了你的建议之后,现在对我来说,这一切都更有意义了。$使它成为一个字符变量,而不是一个数字变量。这几乎肯定会覆盖任何informat错误(因为字符变量非常灵活),但不一定会给出正确的结果。:)的确为了进一步充实答案:列表输入需要冒号,而列输入不需要冒号。别把两者混淆了!列表主要用于分隔输入(即空格、逗号等列表);固定列应与列(
@1 varname informat.
)一起阅读。感谢您的建议@Shorack和您对使用Joe的解释,这非常有用,而且很有效!在玩游戏的时候,我碰巧在4旁边放了一个带句号的$符号,在给它一个字符属性之后,出于某种原因,这个符号也起了作用,但是我对它的理解让我更加困惑,所以在遵循了你的建议之后,现在对我来说,这一切都更有意义了。$使它成为一个字符变量,而不是一个数字变量。这几乎肯定会覆盖任何informat错误(因为字符变量非常灵活),但不一定会给出正确的结果。:)