SAS Перезаписать цифры c переменная в символ - PullRequest
1 голос
/ 03 марта 2020

У меня есть переменная Numberri c (например, цилиндры), и я хочу перезаписать ее на символ (и сохранить в том же порядке в таблице).

Я бы хотел сделать это за один шаг. Есть ли умный способ сделать это?

data cars; set sashelp.cars; 
if cylinders >= 6 then cylinders = 'Big'; 
if cylinders < 6 then cylinders 'Ecocar'; 
run;

Я просто пытаюсь избежать утомительных шагов по созданию новой символьной переменной, а затем приходится перемещать эту новую символьную переменную туда, где цилиндры были в таблице.

Ответы [ 4 ]

5 голосов
/ 03 марта 2020

Попробуйте использовать формат Pro c

Proc format;
      Value CylSize
           0 - 6 = ‘Ecocar’
           7 - high = ‘Big’;
Run;

Data cars;
   Set sashelp.cars;
    Format Cylinders CylSize.;
Run;
2 голосов
/ 04 марта 2020

Вы можете запросить метаданные, чтобы найти порядок переменных и использовать его для определения новой переменной в нужном месте.

Но давайте предположим, что если порядок переменных так важен для вас, то вы уже знаете, как называется первая переменная.

Включите только переменные вплоть до CYLINDERS, используя список переменных на основе позиции. Затем определите вашу новую переменную. Затем перечитайте наблюдение снова со ВСЕМИ переменными, чтобы переменные после CYLINDERS появлялись после новой переменной.

Теперь вы добавляете код для заполнения новой переменной. Брось старый. И переименуйте новую, чтобы иметь старое имя.

Так что, если первая переменная называется MAKE, ваш код выглядит так:

data want ;
  set sashelp.cars(keep=MAKE -- CYLINDERS);
  length new_var $10 ;
  set sashelp.cars;

  if cylinders >= 6 then new_var = 'Big'; 
  else if not missing(cylinders) then new_var = 'Ecocar'; 

  drop CYLINDERS;
  rename new_var=CYLINDERS;
run;
2 голосов
/ 03 марта 2020

Как только переменная определена, вы не можете изменить ее с одного типа на другой, не создавая новую переменную. Вам нужно будет определить, где он должен быть в таблице, прежде чем делать это. Быстрый способ - использовать оператор retain перед оператором set, чтобы определить порядок уже существующих переменных, не беспокоясь о том, какого они типа.

data cars; 
    retain make model type origin drivetrain _cylinders;
    length cylinders $15.;

    set sashelp.cars(rename=(cylinders = _cylinders)); 

    if _cylinders >= 6 then cylinders = 'Big'; 
    if _cylinders < 6 then cylinders = 'Ecocar'; 

    drop _cylinders;
run;

Другой способ - сначала создать фиктивную переменную. таблица, которая выглядит именно так, как вы хотите, и имеет все переменные атрибуты, которые вам нужны. Заполните его только одной пустой строкой, чтобы потом было легче переставить. Давайте назовем это cars_attribs. Например:

Type    C    C     C    C      C          C         N    N       N          ...
Column  make model type origin drivetrain cylinders msrp invoice enginesize ...
Row                                                 .    .       .          ...

Используйте эту таблицу в выражении set с obs=0, чтобы всегда держать ваши любимые переменные позиции.

   data cars; 
    set cars_attribs(obs=0)
        sashelp.cars(rename=(cylinders = _cylinders));
    ;

    if _cylinders >= 6 then cylinders = 'Big'; 
    if _cylinders < 6 then cylinders = 'Ecocar'; 

    drop _cylinders;
run;

Если вы когда-нибудь захотите изменить переменные позиции просто переставьте cars_attribs в Enterprise Guide, перетаскивая столбцы.

1 голос
/ 04 марта 2020

Вы можете использовать переименование и сохранить:

data cars(drop=temp);
retain Make Model Type Origin DriveTrain MSRP Invoice EngineSize cylinders Horsepower 
       MPG_City MPG_Highway Weight Wheelbase Length;
set sashelp.cars(rename=(cylinders=temp));
if temp >= 6 then cylinders = 'Big'; 
if temp < 6 then cylinders = 'Ecocar'; 
run;

Вы также можете использовать pro c sql:

proc sql;
create table cars as 
select Make, Model, Type, Origin, DriveTrain, MSRP, Invoice, EngineSize,
        case when cylinders >= 6 then 'Big'
             when cylinders < 6 then 'Ecocar' end as cylinders,
        Horsepower, MPG_City, MPG_Highway, Weight, Wheelbase, Length
from sashelp.cars
;
quit;
...