SAS代码,用于从数据值末尾去掉撇号

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

我有一个变量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''';
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
*/