【问题标题】:PROC Trasnpose/query builder in SAS Enterprise GuideSAS Enterprise Guide 中的 PROC Trasnpose/query builder
【发布时间】:2013-07-12 14:38:49
【问题描述】:

在查询生成器中运行 Transpose 后,我得到 '.'对于空字段。有没有办法避免这些'。 ?我可以通过添加 case 语句在下一步中删除这些内容,但对超过 100 列执行此操作并不是一个好主意。

123019  1   .   .   .
166584  .   1   .   .
171198  .   .   1   .
285703  .   .   .   1
309185  .   .   .   2
324756  .   .   .   1
335743  .   .   .   .
348340  .   .   .   .

请帮忙。

谢谢

【问题讨论】:

  • SAS 中缺失的数值用“.”表示。当您说要摆脱它们时,您的意思是摆脱所有 100 列都有缺失值的行吗?例如:在上面的例子中。 row_id: 335743 & 348340 将被删除,因为它们的所有列都设置为“。”
  • 想要去掉这些“.”.....这些字段应该是空白或“0”。谢谢
  • 我强烈建议(再次,我认为)编写自己的代码,而不是使用查询生成器。 SAS 语法并不难学,而且比查询生成器更强大。
  • 谢谢乔!正在努力。

标签: sas transpose query-builder enterprise-guide


【解决方案1】:

点(缺失)与 SAS 中的“空白”相同。如果您实际上是在打印数据,则可以使用以下语句:

options missing=' '; *or 0 or any other character;

这将显示缺失(空/空白)值。在某些可能无法保留的上下文中,在这种情况下,您可以使用数据步转换为零,或者使用 PROC STDIZE:

proc stdize data=mydataset missing=0 reponly;
run;

如果您拥有 SAS/STAT 许可,这可能会更快/更容易编写代码。

【讨论】:

  • 我添加了 proc stdize data=ABC2 missing=0 reponly;跑;在查询生成器中,它没有做任何事情。但是如果把它写成一个单独的程序就可以了。
【解决方案2】:

您可以使用此代码:

data myData;
set myData;
array a(*) _numeric_;
do i=1 to dim(a);
if a(i) = . then a(i) = 0;
end;
drop i; 
run;

或者您可以运行所有步骤并将其添加到数据步骤的底部:

array a(*) _numeric_;
    do i=1 to dim(a);
    if a(i) = . then a(i) = 0;
    end;
    drop i; .

顺便说一句,这将取代 .归零,“。”表示 SAS 中的缺失值,您可以替换我为您要显示的任何其他值提供的代码上的 0,而不是 .

编辑:根据您的输入,代码应该是这样的:

PROC SORT DATA=ABC 
OUT=ABC1 ; 
BY EMP; 
RUN; 
PROC TRANSPOSE DATA=ABC1 OUT=ABC2 NAME=Source LABEL=Label; 
BY EM; 
ID VC; 
VAR FQ; 
/* ------------------------------------------------------------------- End of task code. ------------------------------------------------------------------- / 
RUN; QUIT; 

/* Start of custom user code. */
data ABC2;
set ABC2;
array a(*) _numeric_;
do i=1 to dim(a);
if a(i) = . then a(i) = 0;
end;
drop i; 
run;

【讨论】:

  • 过程排序数据=ABCD OUT=DEF ;通过 EMP;跑; PROC TRANSPOSE DATA=DEF OUT=EFG NAME=源标签=标签;通过 EMP;标识VC; VAR FQ;数据 EFG;设置EFG;数组 FQ(*) 数字;做 i=1 到暗淡(FQ);如果 FQ(i) = .那么 FQ(i) = 0;结尾;放下我;
  • 我尝试在 Transpose 中插入代码(通过查询生成器)。我收到此错误:错误 180-322:语句无效或使用顺序不正确。 54 SET=EFG ___ 180 错误 180-322:语句无效或使用顺序不正确。 55; 56 数组 FQ(*) 数字; _____ 180
  • 过程排序数据=ABC OUT=ABC1 ;通过 EMP;跑; PROC TRANSPOSE DATA=ABC1 OUT=ABC2 NAME=Source LABEL=Label ;由 EM;标识VC; VAR FQ; /* ------------------------------------------------ -------------------- 任务代码结束。 -------------------------------------------------- ----------------- /运行;辞职; / 自定义用户代码的开始。 /数据=ABC2;设置=ABC3;数组 FQ() 数字;做 i=1 到暗淡(FQ);如果 _FQ(i) = .然后 _FQ(i) = 0;结尾;放下我;运行;
  • 我是这个编程的新手,所以如果我做错了请告诉我。
  • 听起来你的data语句和set语句颠倒了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多