将多个观察结果合并为一行

时间:2018-05-31 16:28:23

标签: sql sas proc

我列出了2列名称(第1列)和系统(第2列)。我正在尝试创建一个表格,显示列表中每个人的一个观察,他们的名字出现的计数,以及他们有权访问的系统列表。

我的代码基于the example here,但第2列中的变量不是数字,我不断收到警告“注意:数字数据无效,System ='XYZ'”并且创建的表只有所有系统单元中的句点。

我的代码如下,我缺少什么?

PROC SQL;

     CREATE TABLE TESTDATA.sorted_import AS

     SELECT Name,
            System format=$15.,
            COUNT(Name) AS Total

     FROM TESTDATA.Master_Test

     WHERE Name <> ""

     GROUP BY Name;

QUIT;

DATA UniqueList (keep= Name System1-System22);
    RETAIN Total Name System1-System22;
    ARRAY UniqueList(*) System1-System22;
    SET TESTDATA.sorted_import;
    BY Name;
    IF first.name then do;
        i=1;
        CALL MISSING(of UniqueList(*));
END;

    UniqueList(i)=System;
    IF last.name then output;
    i+1;
RUN;

2 个答案:

答案 0 :(得分:0)

如果我已经理解了您的问题,您是否尝试使用字符变量定义数组?:

 <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="hello world"/>

答案 1 :(得分:0)

使用具有隐式簿记的SET BY组的显式循环可以被认为比使用具有明确的簿记的隐式循环更清晰&#39; (保留/呼叫缺失)并且没有计算组大小(total)的先验步骤。

data have (keep=name system);
  do name = 'A', 'B', 'C', 'D', 'E';
    p = 10 * ranuni(123);
    q = (26 - p) * ranuni(123);
    do c = p to q;
      system = byte(65+c);
      output;
    end;
  end;
run;

data want;
  do total = 1 by 1 until (last.name); /* explicit loop over by group */
    set have;
    by name;
    array list(*) $15 system1-system22;
    list(total) = system;
  end;
  drop system;
run;

隐式簿记是非数据集变量在隐式循环顶部重置为缺失,当程序流到达DATA步骤底部时隐式output