“SAS企业指南”中的PROC转置/查询生成器

时间:2013-07-12 14:38:50

标签: sas transpose query-builder enterprise-guide

在查询构建器中运行Transpose后,我得到'。'对于空的领域。有没有办法避免这些'。' ?我可以通过添加一个case语句来删除下一步中的那些,但是这样做超过100列不是一个好主意。

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

请帮忙。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用此代码:

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

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

array a(*) _numeric_;
    do i=1 to dim(a);
    if a(i) = . then a(i) = 0;
    end;
    drop i; .
BTW这将取代。零,“。”表示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;

答案 1 :(得分:0)

Dot(缺失)与SAS中的“blank”相同。如果您实际打印出数据,则可以使用以下语句:

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

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

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

如果您已获得SAS / STAT许可,则可能更快/更容易编码。