我试图基于宏变量在SAS中删除特定的列,在使用什么代码方面我的手有些紧-因此我需要BASE SAS解决方案。
我已经尝试过将drop / keep封装在if中,但是我知道drop在运行时发生,所以这行不通。
示例:
# a dataset
df <- data.frame(day = rep(c(1:5),3),
group = c(rep(1,5),rep(2,5),rep(3,5)),
var_a = seq(1:15),
var_b = seq(2,30, length.out = 15),
var_c = seq(3,45, length.out = 15))
# the logic of what I am going for, on a manually extracted example group:
# initial value (day == 1) of var_a for group 2
df_subset <- df %>%
filter(group == 2)
df_subset$var_a[which(df_subset$day == 1)]
# [1] 6
# my laughable attempt at a function
initial <- function(x){
ini <- which(.$day == 1)
x[ini]
}
# custom function deployed in dplyr pipe (which of course doesn't work)
df %>%
group_by(group) %>%
summarize_at(c("var_a","var_b","var_c"),
list(max = max, ini = initial))
答案 0 :(得分:3)
您要么需要使用宏代码来有条件地生成所需的代码。
updateSQL
或进行更改,以便宏变量具有要删除的列的列表。
data dropsomecolumns;
set have;
%if &somemacro =1 %then %do;
drop somecol1 somecol2;
%end;
run;
请注意,如果未列出任何变量,则drop语句将给出警告,但drop = dataset选项将不会给出警告。
答案 1 :(得分:0)
您没有列出任何变量,它将正常工作,并假定不删除该变量。因此,如果宏变量是变量列表,请使用:
drop &drop_columns;
这很好:
data demo;
set sashelp.class;
drop ;
run;
因此不需要条件逻辑。