gpt4 book ai didi

sas - 使用 LAG 和 LAST.VAR 创建变量

转载 作者:行者123 更新时间:2023-12-02 22:27:01 26 4
gpt4 key购买 nike

我有以下数据集:

AGE    HSQ    PCT

65 1 0.7
65 2 0.2
65 3 0.1
66 1 0.5
66 2 0.25
66 3 0.25

[...]

我需要的是获得以下输出:

AGE     P1    P2     P3

65 0.7 0.2 0.1
66 0.5 0.25 0.25

[...]

我被告知要采用 LAGFIRST.AGELAST.AGE 来做到这一点,对我来说似乎一个好策略。但是我无法获得最终结果。我使用的(错误的)代码是:

DATA OUTPUT;
SET SAMPLE;
BY AGE HSQ;
IF LAST.AGE THEN DO;
P1=LAG2(PCT);
P2=LAG1(PCT);
P3=PCT;
END;
RUN;

但是它跳转到以前的年龄百分比,这不是我需要的。语法错误在哪里?谢谢!

最佳答案

是否被告知这是一项使用它们的作业,或者这是最简单的方法?

最简单的方法是 PROC TRANSPOSE:

data have;
input AGE HSQ PCT;
datalines;
65 1 0.7
65 2 0.2
65 3 0.1
66 1 0.5
66 2 0.25
66 3 0.25
;;;;
run;

proc transpose data=have out=want prefix=P;
by age;
var pct;
id hsq;
run;

LAG 并不像您认为的那样工作 - 它不会为您提供上一行的值;它而是创建一个队列并获取(参数)的当前值,并为您提供队列中的先前值。所以你不能在这样的 IF 语句中使用它。

如果您出于某种原因必须在数据步骤中执行此操作,那么您会希望这样做:

data want;
array p[3];
do _n_ = 1 by 1 until (last.age);
set have;
by age;
p[hsq]=pct;
end;
keep p1-p3 age;
run;

真的没有理由使用滞后,或滞后的任何概念;就像你遇到属于某个地方的值一样,你将它们分配给那个地方,当你点击 last.age 然后输出。

有人想和我一起提出 SASware 请求以删除 LAG 功能吗?

关于sas - 使用 LAG 和 LAST.VAR 创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com