DATA out;
SET input44;
BY firstname;
IF upcase(firstname) in ('TAO', 'CHEN', 'AMANDA', 'JAMES') THEN DO; (原题在in的条件里不打引号,且前面没有upcase变量,导致没有一个变量符合要求). check 1point3acres for more.
IF first.firstname THEN count=0;
count+1;
END;
ELSE IF upcase(firstname) not in ('TAO', 'CHEN', 'AMANDA', 'JAMES') THEN count=0; (不知道这里直接else count=0不要后面的可不可以)
然后问第361个obs的firstname是什么?第582个obs的count是什么?
4.lab改错。给几个条件split dataset。. ----
DATA sofas chairs tables beds;
SET cert.input38;. 1point3acres.com
IF product='SOFA' THEN OUTPUT sofas; (改错前条件里没有大写,和数据集不符,output后面没有跟目标数据集)
ELSE IF product='CHAIR' THEN OUTPUT chairs;
ELSE IF product='TABLE' THEN OUTPUT tables; . From 1point 3acres bbsELSE IF product='BED' THEN OUTPUT beds; (谨慎起见我都会加if...then...,不知道这里只else行不行)
RUN;
然后问你sofas和chairs里面有几个obs?beds里第42个obs的price是多少?
5.lab给一个数据集,按照特定方式排序,并保留相同var1里面var2值最高的那个。记得用first./last.前先排序,否则会报错。
PROC SORT DATA=cert.input13 OUT=input13;
BY descending postal_code income; (邮编降序,收入升序。descending只管后面一个。). 1point 3 acres
RUN;
DATA results.output13; . 1point 3acres SET input13;
BY descending postal_code income;
IF last.income; (同一邮编,升序排在末尾即数值最大)
RUN;
然后问了第64个obs的ID是多少?第52个obs的age是多少?(总之是某个别的变量)
6. lab给数据集,empID的格式是CABnnnnn,比如CAB12306,提取数字部分组成新的num变量numID,y=numID*5,求y在某个组的平均值。
DATA output21;
SET cert.input21;
numID=INPUT(substr(empID,4,5),5.);
y=numID*1.5;
RUN;
问y在比如department='clean'时的平均值。
7. 似乎和上述lab3一个题,firstname含有大小写z的zflag=1,否则zflag=0,求全部数据中zflag=0的数量。
DATA out2;
SET cert.input44;
IF find(firstname,'z','i') ne 0 THEN zflag=1;
ELSE IF find(firstname,'z','i') = 0 THEN zflag=0;
RUN;. 1point 3acres
8.给一个数据集,叫你先drop smoking weight height等,再根据cholesterol建立新变量,比如小于80是正常,80-200是临界,201以上是高。要求不包含missing。
DATA health;
SET cert.input08;-baidu 1point3acres
LENGTH grade $11;
IF cholesterol ne . THEN DO;
IF cholesterol < 80 THEN grade='normal';
ELSE IF cholesterol <=200 THEN grade='normal-high';
ELSE IF cholesterol >=201 THEN grade='high';. Χ
END;
RUN;
问最后normal里有多少obs,high里有多少obs。
这里就是没有定义200-201之间的值,所以200-201之间和原本missing的值一起在grade里都missing。
9.在官方模拟题里有。给数据集,只选择group=A或者B(有大写有小写)的数据。分别算price的median,再把范围外(45-310)的price根据分组分别等于A或者B的median,最后分组算mean。
DATA output45;
SET cert.input45;
WHERE upcase(group) in ('A','B');
RUN;
PROC MEANS DATA=output45 median;
VAR price; . 1point3acresCLASS group;
RUN;. Χ
. From 1point 3acres bbs
DATA output45a;
SET output45;
IF price lt 45 or price gt 310 THEN DO;
IF group='A' THEN price=61;
ELSE IF group='B' THEN price=72;
END;
RUN;
PROC MEANS DATA=output45a mean maxdec=0; (答案要求整数,直接一步到位)
VAR price;
CLASS group;
RUN;
好像问了output45里面一共多少个obs,然后问了output45a里priceA组的mean是多少。
11.给俩数据集合并,全部合上得一个,全部合不上得一个,问问题。
记得先sort再合并。这里假装sort过了。
DATA match nomatch;
SET input32a(IN=a) input32b(IN=b);
IF a=1 and b=1 THEN OUTPUT match;
IF a=0 or b=0 THEN OUTPUT nomatch;
RUN;
具体问题忘了。反正牢记IN=的用法,1是凡是在该数据集中obs就添加,0是凡是该数据集中的obs都减去。