SAS代码,用于从数据值末尾去掉撇号
我有一个变量Deck1-Deck100(Deck1到Deck100代表一项任务的100次试验),它有四个可能的值a‘B’C‘D’。我需要重新编码这个变量,使A'和B'=0,C'和D'=1。你能帮忙吗?我不知道如何压缩变量。假设您在一次观察中拥有所有100个变量,并且只想重新编码这些值,下面的方法可能会奏效。把4号换成100号就行了SAS代码,用于从数据值末尾去掉撇号,sas,apostrophe,Sas,Apostrophe,我有一个变量Deck1-Deck100(Deck1到Deck100代表一项任务的100次试验),它有四个可能的值a‘B’C‘D’。我需要重新编码这个变量,使A'和B'=0,C'和D'=1。你能帮忙吗?我不知道如何压缩变量。假设您在一次观察中拥有所有100个变量,并且只想重新编码这些值,下面的方法可能会奏效。把4号换成100号就行了 data sample; deck1='A'''; deck2='B'''; deck3='C'''; deck4='D'''; r
data sample;
deck1='A''';
deck2='B''';
deck3='C''';
deck4='D''';
run;
proc print data=sample;
run;
data result;
set sample;
array alldecks(4) deck1-deck4;
do i=1 to 4;
if alldecks(i) eq 'A''' or alldecks(i) eq 'B''' then alldecks(i)='0';
if alldecks(i) eq 'C''' or alldecks(i) eq 'D''' then alldecks(i)='1';
end;
drop i;
run;
proc print data=result;
run;
这将为您提供以下输出:
Obs deck1 deck2 deck3 deck4
1 A' B' C' D'
Obs deck1 deck2 deck3 deck4
1 0 0 1 1
或informat方法:
/* generate a fake data set */
data trials;
array trial(100) $2.;
array t(4) $2. _temporary_ ("A'","B'","C'","D'");
do i = 1 to 100;
j=ceil(ranuni(112233)*4);
trial[i] = t[j];
end;
drop i j ;
run;
proc print noobs;
var trial1-trial10;
run;
/* create a 'recoding' format */
proc format;
invalue trials (upcase)
"A'","B'"=0
"C'","D'"=1
other=.;
run;
/* convert the values */
data newtrials;
set trials;
array trial(*) $2. trial1-trial100;
array rtrial(100);
do i = 1 to 100;
rtrial[i]=input(trial[i], trials.);
end;
drop i trial:;
run;
proc print noobs;
var rtrial1-rtrial10;
run;
这将产生以下输出:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
trial1 trial2 trial3 trial4 trial5 trial6 trial7 trial8 trial9 trial10
D' D' B' A' A' D' A' B' C' D'
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rtrial1 rtrial2 rtrial3 rtrial4 rtrial5 rtrial6 rtrial7 rtrial8 rtrial9 rtrial10
1 1 0 0 0 1 0 0 1 1
剥离单个报价很容易,只需
compress()
it即可:
data _null_;
length old new $8.;
old = "A'";
new = compress(old, "'");
put (_all_) (=/);
run;
/* on log
old=A'
new=A
*/