Как заменить значение на значение Другой строки в SAS из набора данных - PullRequest
0 голосов
/ 16 апреля 2020

Как заменить, если значение равно 1 значением строки ниже "Вес" Найдите текущий набор данных изображения ниже и требуемый окончательный вывод,

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

dataset image

Ответы [ 3 ]

0 голосов
/ 28 апреля 2020

Я разделил вышеуказанный набор данных на два набора данных для employee_id и веса сотрудника

data two;
retain type 'n';
input GROUP $ CODE $;
fmtname=cats(trim(group)||'f');
start=1; 
label=code;
cards;
TEST1 1.412
TEST2 0.207
TEST3 0.207
TEST4 0.207

proc format cntlin=two;
run;

data one;
input emp_id TEST1 TEST2 TEST3 TEST4;
format test1 test1f. test2 test2f. test3 test3f. test4 test4f.;
cards;
10850 0 1 0 1
10851 1 0 0 0
10852 0 0 1 0
10853 0 0 0 0;
0 голосов
/ 28 апреля 2020

Точный вывод из вышеперечисленного, без разделения наборов данных

data have;
input id $ test1-test4;
cards;
1 0 0 0 1
2 1 0 0 0
3 0 0 1 0
4 0 0 0 0
weight 1.412 0.207 0.207 0.207;
data want;
set have;
if _n_=1 then set have(keep=test1-test4 
rename=(test1-test4=t1-t4)) point=nobs nobs=nobs;
array x{*} test1-test4;
array y{*} t1-t4;
do i=1 to dim(x);
if x{i} then x{i}=y{i};
end;
drop i t1-t4;
run;
0 голосов
/ 16 апреля 2020

Рассматривайте этот дополнительный ряд как отдельный набор данных. Давайте сделаем это в несколько шагов, чтобы прояснить ситуацию.

data weights;
  set have;
  where emp_id='weight';
  rename test1-test4 = weight1-weight4 ;
  keep test1-test4 ;
run;
data want ;
  if _n_=1 then set weights;
  set have;
  array t test1-test4;
  array w weight1-weight4;
  if emp_id = 'weight' then delete;
  do index=1 to dim(t);
     t[index]=t[index]*w[index];
  end;
  drop weight1-weight4;
run;

Если вы хотите испортить результаты, сохраняя наблюдение за весом, вы можете изменить IF THEN logi c так, чтобы значения T [ *] обновляются только тогда, когда наблюдение представляет собой реальные данные о сотруднике, но наблюдение за весом не удаляется.

  if emp_id ne 'weight' then do index=1 to dim(t);
     t[index]=t[index]*w[index];
  end;

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

...