假设有以下简单情况(仅用于解释目的)。原始数据显示更为复杂):
data have; input ID :$20. Label1 :$20. Label2 :$20. Hours :$20.; cards; 0001 rep1 w 345 0001 rep1 f 985 0001 rep1 w 367 0001 rep2 w 65 0001 rep2 w 123 0001 rep2 f 120 0002 rep6 f 45 0002 rep6 w 657 0002 rep6 w 45 0002 rep1 w 567 0002 rep1 f 78 0002 rep1 w 9 ..... .... ... ... ;
我想求和,预先确定与"w“对应的时间,但也按Label1分层,即rep*。我用:
数据需要;设置有;由ID Label1;如果first.ID .如果last.ID .跑;
虽然我能够按ID分层,但我不能按Label1分层。是否可以这样写:如果first.ID和first.Label1那么.?在进行一些尝试时,SAS还给了我以下错误:"by变量没有在数据集上正确排序“。输入数据按ID排序。
提前谢谢你
发布于 2022-10-11 11:19:42
显然,正如您所说的,输入数据是按ID排序的,因此可以使用first.ID,但是数据不是按标签排序的,因此不能使用first.label。如果要同时使用这两个变量,则必须同时对两个变量进行排序:
proc sort data=have;
by ID label;
quit;但请记住,在您的示例数据中,不仅有一个用于first.label=1的label=rep1,而且有两次:
first.ID first.label
0001 rep1 w 345 1 1
0001 rep1 f 985 0 0
0001 rep1 w 367 0 0
0001 rep2 w 65 0 1
0001 rep2 w 123 0 0
0001 rep2 f 120 0 0
0002 rep1 w 567 1 1
0002 rep1 f 78 0 0
0002 rep1 w 9 0 0
0002 rep6 f 45 0 1
0002 rep6 w 657 0 0
0002 rep6 w 45 0 0https://stackoverflow.com/questions/73762223
复制相似问题