【发布时间】:2018-02-02 01:08:30
【问题描述】:
我有两个数据集,一个是男性,一个是女性,它们包含相同的变量。我需要按组找出每个变量的性别百分比差异。
数据集看起来像这样,但包含更多变量和组,
| Group | Sex | VarA | VarB |
|-------+-----+------+------|
| 1 | F | 8 | 5 |
| 2 | F | 6 | 3 |
| 3 | F | 7 | 0 |
|-------+-----+------+------|
| Group | Sex | VarA | VarB |
|-------+-----+------+------|
| 1 | M | 9 | 7 |
| 2 | M | 8 | 5 |
| 3 | M | 6 | 3 |
|-------+-----+------+------|
我需要的结果是这样的:
| Group | percent_diffA | percent_diffB |
|-------+---------------+---------------|
| 1 | -0.117647059 | -0.333333333 |
| 2 | -0.285714286 | -0.5 |
| 3 | 0.153846154 | -2 |
|-------+---------------+---------------|
我可以通过重命名每个变量的合并来解决这个问题。
data difference;
merge
females (rename = (VarA = VarA_F VarB = VarB_F)
males (rename = (VarA = VarA_M VarB = VarB_M)
;
by group;
percent_diffA = (VarA_F - VarA_M) / ( (VarA_F + VarA_M) / 2 );
percent_diffB = (VarB_F - VarB_M) / ( (VarB_F + VarB_M) / 2 );
drop sex;
run;
但是,这种方法需要我手动重命名所有内容。使用多个变量,重命名语句变得很麻烦。不幸的是,这个计算被插入到一些旧代码中,所以重命名原始数据集是不切实际的。
我想知道是否有另一种更简单的方法来解决这个问题。
编辑:我已经更新了变量名,因为这似乎引起了人们的困惑。它们最初被称为Var1 和Var2。他们现在是VarA 和VarB。真正的变量名称是描述性的,例如body_weight_g 或gonadal_somatic_index。变量不是简单地用序号列出的。
【问题讨论】:
-
双重转置并在 ID 语句中使用两个变量以便自动重命名?或者将数据结构更改为一般的长数据结构可能会更容易整体使用,但可能不适合您的流程。
标签: sas