当前位置: 首页 > 面试题库 >

使用proc sql有效地转置

凌运恒
2023-03-14
问题内容

我想知道是否有可能在SAS中使用proc sql从宽有效地转换成长有效。

我知道proc换位比我在下面建议的方法要快得多。但是我的目标之一是避免存储转置表。

例如,假设我有table1作为

Id|   A|   B|   C|  D    
_____________________
 1|  100|3500|6900| 10300
 2|  200| 250| 300| 350
 3|  150|  32| 400| 204
 4|  200| 800|1400| 2000

我想把它变成

id|col1|  col2|
______________
 1|   A|   100|
 1|   B|  3500|
 1|   C|  6900|
 1|   D| 10300|
 2|   A|   200|
 2|   B|   250|
 2|   C|   300|
 2|   D|   350|
 3|   A|   150|
 3|   B|    32|
 3|   C|   400|
 3|   D|   204|
 4|   A|   200|
 4|   B|   800|
 4|   C|  1400|
 4|   D|  2000|

我可以做到这一点;

选择id,’A’作为col1,A作为
来自table1的col2 ,
其中A〜=“”
联合选择id,’B’作为col1,B作为
来自table1的col2 ,
其中B〜=“”


但是效率很低。

任何的想法?谢谢。


问题答案:

如果您在中SAS,请使用PROC TRANSPOSE此选项。PROC SQL;尽管许多SQL变体都有自己的数据透视方式,SAS并且已经PROC TRANSPOSE并且希望您使用它,但是没有特别好的方法来执行此操作。

SAS数据步骤也可以非常高效地执行此操作,甚至可能比更好PROC TRANSPOSE。这是一个示例,包括创建注释中提到的视图。

data want/view=want;
set have;
array vars a b c d;                  *array of your columns to transpose;
do _t = 1 to dim(vars);              *iterate over the array (dim(vars) gives # of elements);
  if not missing(vars[_t]) then do;  *if the current array element's value is nonmissing;
    col1=vname(vars[_t]);            *then store the variable name from that array element in a var;
    col2=vars[_t];                   *and store the value from that array element in another var;
    output;                          *and finally output that as a new row;
  end;
end;
drop a b c d _t;                     *Drop the old vars (cols) and the dummy variable _t;
run;


 类似资料:
  • 产品用例——我们的产品有一个典型的用例,我们将有n个用户。每个用户将有n个工作流,每个工作流可以在任何时间运行(n次)。 我希望这是任何工作流产品的典型用例。 我可以使用域来区分用户吗(我的意思是说为每个用户创建一个域)? 我可以为每个用户创建一个WorkflowClient来服务他所有的工作流执行吗?或者对于每个请求,我需要创建一个工作流客户端吗?哪一个是推荐的方法? 创建工作对象以轮询任务列表

  • 给定一个由整数和一个数字组成的数组,,对该数组执行左旋转。然后将更新后的数组打印为单行空格分隔的整数。 示例输入: 如何使用更少的内存来解决这个问题?

  • 问题内容: 我想将mongo-go-driver中的 bson转换为json。 我应该小心处理,因为如果数据中存在则失败。 例如,我想将以下bson数据转换为json。 以下失败。 问题答案: 如果您知道BSON的结构,则可以创建一个实现和接口的自定义类型,并根据需要处理NaN。例: 如果您的BSON具有任意结构,则唯一的选择是使用反射遍历该结构,并将所有出现的NaN转换为类型(可能是如上所述的自

  • 问题内容: 我一直在使用JSONObject和JSONReader,但理想情况下,我正在寻找一种混合动力:) 特别是,给定JSON对象流(任意长的JSON数组的一部分),是否有一个帮助程序/库,它一次生成迭代器样式的“ JSONObject”,而无需读取其中的所有内容或不必解析单个原始字段(JsonReader )? 假设API的示例: 上面,调用readObject解析一些复杂的JSON子树,并

  • 如果您使用过电子表格或其他分析工具,那么学习Tableau的桌面环境将会很有帮助。如果您不熟悉电子表格或数据库术语,则仍可在几天内有效地使用Tableau。 数据连接页面和起始页面 打开Tableau,您将看到Tableau Desktop的起始页面。 在左侧,数据窗口提供连接选项。如果单击它以连接到数据,则会转到数据连接工作区。您还可以通过单击“开始”按钮旁边的硬盘选项卡来访问此页面。如果要连接

  • 在目前早期发布的名为高性能Spark的教科书中,Spark的开发人员注意到: 为了使Spark能够灵活地将一些记录溢出到磁盘上,在中表示函数是很重要的,这样函数就不会强制将整个分区加载到内存中(例如隐式转换为列表)。迭代器有许多方法,我们可以在上面编写函数样式转换,或者您可以构造自己的自定义迭代器。当一个转换直接获取并返回一个迭代器而不强制它通过另一个集合时,我们称之为迭代器到迭代器转换。 注意: