我有这个数据集
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;
但我得到错误,说我添加的行无效或无序。我该如何解决这个问题?
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;
,这将成为一个新的空步骤,而不是原始数据步骤的一部分。