我目前有一个包含200个变量的数据集。从这些变量中,我创建了100个新变量。现在我想删除原来的200个变量。我怎样才能做到这一点?
稍微好一点的是,如何在新数据集中删除变量3-200。
抱歉,如果我的问题含糊不清,但基本上我发现我需要使用 - 。 如果我的第一个变量是第一个被调用而我的最后一个变量是最后一个变量,那么我可以删除所有变量(drop = first - last);感谢所有回复。
答案 0 :(得分:5)
与大多数SAS任务一样,有几种选择。从SAS数据集中删除变量的最简单,最安全的方法是使用PROC SQL。只需按名称列出变量,用逗号分隔:
proc sql;
alter table MYSASDATA
drop name, age, address;
quit;
使用PROC SQL更改表会从适当的数据集中删除变量。
另一种技术是使用DROP
选项重新创建数据集:
data have;
set have(drop=name age address);
run;
另一种方法是使用DROP
声明:
data have;
set have;
drop name age address;
run;
答案 1 :(得分:3)
许多选项 - 一些“更安全”,一些不太安全但更容易编码。让我们假设您有一个数据集,其中包含变量ID,PLNT和x1-x200。
data have;
id=0;
plnt=0;
array x[200];
do _t = 1 to dim(x);
x[_t]=0;
end;
run;
data want;
set have;
*... create new 100 variables ... ;
*option 1:
drop x1-x200; *this works when x1-x200 are numerically consecutive;
*option 2:
drop x1--x200; *this works when they are physically in order on the dataset -
only the first and last matter;
run;
*或者,这样做。这也适用于SQL ALTER TABLE。这是 最安全的方法。
proc sql;
select name into :droplist separated by ' ' from dictionary.columns
where libname='WORK' and memname='HAVE' and name not in ('ID','PRNT');
quit;
proc datasets lib=work;
modify want;
drop &droplist.;
quit;
答案 2 :(得分:1)
如果您要删除的所有变量都被命名为所有变量(例如old_var_1
,old_var_2
,...,old_var_n
),则可以执行此操作(注意drop选项中的冒号:
data have;
set have(drop= old_var:);
run;
答案 3 :(得分:0)
data want;
set have;
drop VAR1--VARx;
run;
很想知道您是否可以按职位做到这一点。 绝对可以使用以双破折号(-)分隔的变量名。
答案 4 :(得分:0)
我有一些宏可以允许here
你可以运行一整套宏,或者只运行 list_vars()
, is_blank()
, num_words
, find_word
, remove_word
, remove_words
, {{ 1}}。
使用这些将是:
nth_word()
这将保留三个变量 %let keep_vars = keep_this and_this also_this;
%let drop_vars = %list_vars(old_dataset);
%let drop_vars = %remove_words(&drop_vars , &keep_vars);
data new_dataset (drop = &drop_vars );
set old_dataset;
/*stuff happens*/
run;
但删除旧数据集中的其他所有内容。