如果它包含3个观察结果,如何在sas数据集中交换第一个和最后一个观察结果

时间:2014-04-20 05:17:04

标签: sas

我有一个包含3个观察值的数据集,1 2 3                                         4 5 6                                         7 8 9,现在我必须互换1 2 3和7 8 9。 如何在基地sas做到这一点?

3 个答案:

答案 0 :(得分:0)

如果您只想按变量按降序对数据集进行排序,请使用proc sort:

data example;
  input number;
  datalines;
123
456
789
;
run;

proc sort data = example;
    by descending number;
run;

如果要以更复杂的方式重新排序数据集,请创建一个新变量,其中包含您希望每行所在的位置,然后按该变量对其进行排序。

答案 1 :(得分:0)

如果你想交换第一个和最后一个观察的内容,同时保留其余的数据集,你可以这样做。

data class;
  set sashelp.class;
run;

data firstobs;
  i = 1;
  set sashelp.class(obs = 1);
run;


data lastobs; 
  i = nobs;
  set sashelp.class nobs = nobs point = nobs;
  output;
  stop;
run;

data transaction;
  set lastobs firstobs;
  /*Swap the values of i for first and last obs*/
  retain _i;
  if _n_ = 1 then do;
    _i = i;
    i = 1;
  end;
  if _n_ = 2 then i = _i;
  drop _i;
run;

data class;
  set transaction(keep = i);
  modify class point = i;
  set transaction;
run;

这仅修改了第一个和最后一个观察结果,这应该比排序或替换大数据集快得多。您可以使用update语句执行类似的操作,但只有在数据集已使用唯一键进行排序/索引时才能执行此操作。

答案 2 :(得分:0)

By Sandeep Sharma:sandeep.sharmas091@gmail.com

  data testy;
     input a; 
     datalines;
1
2
3
4
5
6
7
8
9
;
run;

data ghj;
      drop y;
         do i=nobs-2 to nobs;
           set testy point=i nobs=nobs;
             output;
               end;

        do n=4 to nobs-3; 
          set testy point=n;
            output;
              end;

           do y=1 to 3;
             set testy;
               output;
                 end;
stop;
run;