在 SAS 中过滤偶数列

问题描述 投票:0回答:2

我有一个包含具有特定结构的财务数据的数据集:

|Date    |price1  |Date    |price2  |...|Date    |priceN  |
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |

我需要将数据从宽转为长,但首先我必须仅选择第一列(日期)和所有价格列,即所有偶数列。我用 python 做了它,它工作了,所以使用 chat gpt 将其转换为 SAS,但它不起作用,chat gpt 给出以下代码:

data filter_price;
set price;
array columns[*] _all_;
do i=1 to dim(columns);
   if mod(i,2)=0 then output;
end;
keep columns:;
run;

上面代码的结果是这样的数据集:

|Date    |price1  |Date    |price2  |...|Date    |priceN  |i  |  
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |2  |
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |4  |
|dd/mm/yy|numeric |dd/mm/yy|numeric |...|dd/mm/yy|numeric |6  |

它添加了一列,其中包含类似索引之类的内容,只接受偶数。我需要的结果如下:

|Date    |price1  |price2  |...|priceN  |
|dd/mm/yy|numeric |numeric |...|numeric |
|dd/mm/yy|numeric |numeric |...|numeric |
|dd/mm/yy|numeric |numeric |...|numeric |

你能帮我吗?我把我用 python 做的东西留给你,以防它有用。

import pandas as pd
# Lee el archivo de precios
df = pd.read_excel("/content/prueba_pivote_precios.xlsm")

# Elimina la primera fila (que no tiene datos)
df.drop(0, axis=0, inplace=True)

# identifica el nombre de las columnas (el nombre válido de las columnas viene cada dos columnas)
names = df.columns.to_list()
names2 = []
for i in range(len(names)):
  if i%2!=0:
    names2.append(names[i])

# Selecciona las columnas válidas
df2 = df[names2]

# recupera la columna de fechas del data set original
df3["FECHA"] = df.iloc[:, 0]

python sas
2个回答
0
投票

SAS 中不能有同名的列。

但是,您可以使用以下语句轻松选择具有名称价格的所有列。

data want;
set have;

KEEP DATE PRICE:;
run;

或者如果您想保留一系列变量:

data want;
set have; 

KEEP DATE PRICE1-PRICEN;
run;

如果您只想保留价格2、价格4,那就另当别论了。

在 SAS 中寻找“偶数”列是错误的方法。


0
投票

如果“枢轴”指的是 TRANSPOSE,那么只需使用 ARRAY。我假设所有变量都是数字。

data want;
 set have;
 array prices _numeric_;
 length name $32 price 8;
 do index=2 to dim(prices) by 2;
   name=vname(prices[index]);
   price=prices[index];
   output;
 end;
 keep date index name price;
run;  
© www.soinside.com 2019 - 2024. All rights reserved.