gpt4 book ai didi

arrays - SAS如何使用ARRAY更改变量(列)位置(值也)

转载 作者:行者123 更新时间:2023-12-02 01:17:10 25 4
gpt4 key购买 nike

我是 SAS 新手,遇到切换列内容的问题。

我有一个像这样的数据集:

data switch;
input total A1 A2 A3 A4 A5 A6 A7 A8 A9 A10;
cards;
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
1234567890 1 2 3 4 5 6 7 8 9 0
;
run;

所以目标是获取 A10 中的值并填充到 A1,A9 到 A2,A8 到 A3 等。喜欢:

total      A1 A2 A3 ...
1234567890 0 9 8
1234567890 0 9 8
1234567890 0 9 8

所以通常要向后切换列(第一个变量除外)。

并且数组是必需的。

我根本不知道该怎么做,因为 SAS 读取行(观察)。

谁能帮我解决这个问题?

非常感谢!

=============================谢谢大家的指点,我也想出了一个办法,也是借一个temp或者middle array:

data want;
set switch;
array old(1:10) A1 - A10;
array mid(1:10) B1 - B10;

do i=1 to 10;
mid[i]=old[i];
end;

array new(1:10) A1 - A10;
do i=1 to 10;
new[i]=mid[11-i]; /* input in new array with mid array in reverse order */
end;

drop B1 - B10 i; /* drop unwanted column */
run;

最佳答案

这是一种使用两个数组和两个 do 循环的方法。基本上以相反的顺序将值存储在新变量中,然后将它们移回原始变量。可以使用 rename 语句在没有数组的情况下完成类似的方法。

data want;
set switch;

array var (*) A1-A10;
array holder (10) H1-H10;

do i = 1 to (10);
holder{i} = var{(10 - i + 1)};
end;

do i = 1 to 10;
var{i} = holder{i};
end;

drop H1-H10 i;
run;

编辑:将方法减少到只有一个临时变量、一个数组和一个 do 循环:

data want;
set switch;
array var (*) a1-a10;


do i = 1 to (floor(dim(var)/2));

a11 = var{i};
var{i} = var{(dim(var)- i +1)};
var{(dim(var) - i +1)} = a11;

end;

drop i a11;
run;

关于arrays - SAS如何使用ARRAY更改变量(列)位置(值也),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42198127/

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