gpt4 book ai didi

SAS - 将行中的多个变量转置为列

转载 作者:行者123 更新时间:2023-12-04 19:26:17 25 4
gpt4 key购买 nike

我正在尝试使用数组来完成以下任务。但是,我以前从未使用过,我遇到了一些麻烦。

基本上我想获取以下数据并为每个 acct、seq1、seq2 组合创建一行(观察):

acct  seq1 seq2  la      ln
9999 1 10 20.01 100
9999 1 10 19.05 1
9999 2 11 26.77 100
9999 2 11 24.86 1
8888 3 20 38.43 218
8888 3 20 37.53 1

这就是我想要的结果。请注意,为了空间的缘故,我只显示了 la1 到 la3 和 ln1 到 ln3。它实际上会转到 la7 和 ln7:

acct  seq1  seq2     la1     la2    la3  ln1    ln2 ln3
9999 1 10 20.01 19.05 . 100 1 .
9999 2 11 26.77 24.86 . 100 1 .
8888 3 20 38.43 37.53 . 218 1 .

这是我到目前为止尝试过的代码。任何帮助将不胜感激:

data want;
set have;
by acct seq1 seq2;
if first.seq2 then do;
array la_array {7} la1-la7;
array ln_array {7} ln1-ln7;
end;
do i = 1 to 7;
la_array(i)=la;
ln_array(i)=ln;
end;
run;

最佳答案

我会走另一条路,利用 PROC SUMMARY(或 MEANS)中的一个小功能来实现这一点。输出表按 ACCT 排序,因为这是 CLASS 语句中的第一个变量,显然您之后可以轻松地按 SEQ1 顺序求助。

IDGROUP 语句与 OUT[7] 一起为列出的每个变量(LA、LN)创建 7 个变量,并在读取数据时按顺序填充它们。 AUTONAME 选项将序列号添加到变量名称(例如 LN1、LN2、...、LN7)。我使用此方法遇到的唯一问题是源数据集非常大的服务器上出现内存不足错误,这是由于 PROC SUMMARY 在内存中运行所致。希望它在这种情况下对您有用。

proc summary data=have nway;
class acct seq1 seq2;
output out=want (drop=_:)
idgroup(out[7] (la ln)=) / autoname;
run;

关于SAS - 将行中的多个变量转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384634/

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