在SAS中使用Arrays for循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SAS中使用Arrays for循环相关的知识,希望对你有一定的参考价值。

我有这个数据集

    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:MyRawDataKBRK.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;

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

答案
  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;
另一答案

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

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

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

以上是关于在SAS中使用Arrays for循环的主要内容,如果未能解决你的问题,请参考以下文章

伪代码转换为SAS宏代码

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

java中for循环的特殊:foreach的使用

如何在Django视图中使用for循环返回每次迭代[关闭]

如何使用引导程序和 for 循环在 django 中创建电影片段?

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始