在SAS中使用Arrays for循环

问题描述 投票:1回答:2

我有这个数据集

    DATA Problem3;
    INPUT name $ Smoke_Tobacco $ Drink_Alcohol $ Take_Illegal_Drugs $ Drink_Soda $;
DATALINES;
    Tom yes no no yes
    Harry Yes Yes Yes No
    Jim No No No Yes
    Bob Yes No No Yes
    Andy No Yes No Yes
    Cody yes no no no
    Ed Yes no no yes
    Greg no Yes no No
    Dave Yes No Yes no
;
RUN;

我想使用循环将所有“是”响应更改为“是”,将所有“否”响应更改为“否”。

我的想法是使用数组,例如Little SAS工作簿中显示的内容

DATA songs;    
    INFILE 'c:\MyRawData\KBRK.dat';    
    INPUT City $ 1-15 Age wj kt tr filp ttr;    
    ARRAY song (5) wj kt tr filp ttr;    
    DO i = 1 TO 5;       
        IF song(i) = 9 THEN song(i) = .;    
    END;
Run;

用“。”代替“9”。所以我编辑我的代码

    DATA Problem3;
    INPUT name $ Smoke_Tobacco $ Drink_Alcohol $ Take_Illegal_Drugs $ Drink_Soda $;
DATALINES;
    Tom yes no no yes
    Harry Yes Yes Yes No
    Jim No No No Yes
    Bob Yes No No Yes
    Andy No Yes No Yes
    Cody yes no no no
    Ed Yes no no yes
    Greg no Yes no No
    Dave Yes No Yes no
;
    ARRAY Answer (4) Smoke_Tobacco Drink_Alcohol Take_Illegal_Drugs Drink_Soda;
    DO i=1 TO 9;
        IF Answer(i) = 'yes' THEN Answer(i)= 'Yes';
        ELSE IF Answer(i) = 'no' THEN Answer(i)= 'No';
    END;

RUN;

但我得到错误,说我添加的行无效或无序。我该如何解决这个问题?

sas
2个回答
1
投票
  1. 将数组声明为字符,因此将$添加到数组声明中
  2. 只需将PROPCASE应用于将所有标准化为第一个字母作为大写的变量。
  3. 当你只有4个项目时,为什么要循环到9?
  4. 您必须在数据表之前放置数组语句。处理数据后没有任何内容。 DATA Problem3; INPUT name $ Smoke_Tobacco $ Drink_Alcohol $ Take_Illegal_Drugs $ Drink_Soda $; ARRAY Answer (4) $3. Smoke_Tobacco Drink_Alcohol Take_Illegal_Drugs Drink_Soda; DO i=1 TO 4; answer(i)=propcase(answer(i)); END; DATALINES; Tom yes no no yes Harry Yes Yes Yes No Jim No No No Yes Bob Yes No No Yes Andy No Yes No Yes Cody yes no no no Ed Yes no no yes Greg no Yes no No Dave Yes No Yes no ; RUN;

0
投票

在数据步骤结束后,您无法添加语句!

只需将新语句移至DATALINES;语句之前,该语句标记数据步骤的结束和内联数据的开头。还要确保do循环的上限与数组的大小相匹配。让SAS为您解决这个问题。 do i=1 TO dim(answer);

这是我最近看到的第二个混淆线?我想知道它是否是由人们在使用内联数据的数据步骤结束后反复添加额外的run;语句引起的?不需要额外的run;,这将成为一个新的空步骤,而不是原始数据步骤的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.