我正在尝试更改原始数据文件的输出。 在原始数据中,数据采用以下格式:

Name    Test1   Test2   Test3   Test4
xyz     45      78      88      100
avb     -1      89      76      29

但我想将数据结构更改为以下格式:

Name    Score
xyz     45
xyz     78  
xyz     88
xyz     100
xyz     89 (skip -1 because it's less than 0) 

我试图使用数组和输出语句,但有麻烦。 这是我的代码:

Data Stats; 
  set Record; 
  Array Test(*) Test1 - Test 6; 
  do i = 1 to 6; 
    if Test(i) gt -1 then output; 
  end;
run;

#1楼 票数:5

您缺少的是将值移动到单个列中。 现在你得到了正确的行数,但你没有得到单列。

Data Stats; 
  set Record; 
  Array Test(*) Test1 - Test 6; 
  do i = 1 to 6; 
    if Test(i) gt -1 then do;
      score=test(i);  *save value onto Score variable;
      output; 
    end;
  end;
  keep score name;  *only keep the two variables you want;
run;

#2楼 票数:2

你可以使用proc transpose或Array语句和do循环来解决你的问题。

data record;
infile datalines missover;
input Name  $ Test1   Test2   Test3   Test4;
datalines;
xyz     45      78      88      100
avb     -1      89      76      29
;;;;
run;

/* Solution #1 : Using PROC TRANSPOSE */
proc transpose data=record out=solution_1(rename=(col1=score) where=(score>0) drop=_name_);
by notsorted name;
var test1--test4;
run;
proc print data=solution_1;run;


/* Solution # 2 : Using Array and do loop */
data solution_2;
set record;
array temp(*) test1-test4;

do i=1 to dim(temp);
score=temp[i];
if score >0 then output;
end;
keep name score;
run;
proc print data=solution_2;run;

#3楼 票数:1

您可以使用非常简单的方法解决此问题。

    data original;

    input Name $ Test1-Test4;

    cards;

    xyz 45 78 88 100

    avb -1 89 76 29
    ;

    run;



    ***now you need to sort your data by Name *************;

    proc sort data=original;
    by Name;
    run;

********************************************************;

    data u_want;

    set original;

    array Test[4];

    do i=1 to dim(Test);

    if Test[i] >= 0 then Score=Test[i]; output;

    end;

    Drop i Test1-Test4;

    run;

    **********************************************************;

    proc print data=u_want;

    run;

Thanks!

  ask by Sam translate from so

未解决问题?本站智能推荐:

1回复

SAS:这个声明有什么作用?

我的 SAS 代码中有以下语句来自另一个人,但我无法弄清楚它的作用。 当显然创建一个名为variable_X的新变量时,它位于 DATA 步骤内: 有人可以向我解释这种input和put组合背后的逻辑吗?
2回复

SAS保留声明

假设我有一个包含三个变量的数据集: 身份证年份状态 1 2017年 1 2017 N 1 2018 N 1 2018年 2 2017年 2 2017 2 2018 N 2 2018 N 我想创建一个名为NEW的第四列,它具有三个可能的值(“ Yonly”
2回复

SAS长度声明

我刚刚意识到减少数字(虚拟和整数)变量的长度是多么有用,因为它节省了我的时间和磁盘空间。 但是,我认为在我的代码末尾使用length语句比在提到“set”之前使用它更方便(后一种方式是SAS博客和其他专家主要建议你使用长度语句)。 那么,这两种方式之间是否存在差异(参见下面的例子)?
1回复

SAS阵列声明

我正在阅读用于计算NBBO的SAS代码 ,我遇到了以下代码: 我想知道语句array nexb nexb:;是什么array nexb nexb:; 在这做?
4回复

SAS条件声明

这个: 我希望此条件检查是否: VAR1不等于VAR2,VAR3,VAR4 VAR2不等于VAR1,VAR3,VAR4 VAR3不等于VAR1,VAR2,VAR4 VAR4不等于VAR2,VAR3,VAR1 这可能吗?
1回复

输出SAS的前10%

如何将SAS中输出的观测值的数量限制为前10%? 我知道obs =函数,但是我还无法弄清楚如何使obs =导致百分比。 提前致谢!
4回复

从sas输出报告

您好我需要从我的sas代码输出dat文件,类似: 因此,它是注释和文本的混合,下面是管道分隔的数据。 我尝试使用proc export,但没有打印任何标题,我也尝试了Ods,并为每个注释使用title语句,但也不起作用。 任何人都可以提出实现此目标的方法吗?
2回复

SAS中的HTML输出

我只能在Log中看到SAS程序的结果,例如: 它没有显示任何错误,但是我没有在html文件中看到结果。 如何打开html输出?