SAS-存储字符和数字的列上的频率

SAS-存储字符和数字的列上的频率,sas,Sas,我有一个列,包含字符和数字变量。本栏中的内容示例如下 T M 12 3112 我想在此列上执行proc frequency(或使用任何其他函数)来读取字符和数值。使用proc freq会忽略char变量,只对数值执行操作。 谢谢我同意@Tom的观点,发布代码更符合SO的指导原则 @t喂,你的问题实际上不是关于proc freq,而是关于SAS数据集以及它们是如何在数据步骤中创建的proc freq只读取给定给它的内容。SAS数据集由变量(类似于列)和观察值(类似于行)组成。变量可以是字符或数字

我有一个列,包含字符和数字变量。本栏中的内容示例如下

T
M
12
3112
我想在此列上执行proc frequency(或使用任何其他函数)来读取字符和数值。使用proc freq会忽略char变量,只对数值执行操作。
谢谢

我同意@Tom的观点,发布代码更符合SO的指导原则

@t喂,你的问题实际上不是关于
proc freq
,而是关于SAS数据集以及它们是如何在数据步骤中创建的
proc freq
只读取给定给它的内容。SAS数据集由变量(类似于列)和观察值(类似于行)组成。变量可以是字符或数字,但不能同时是字符和数字。没有像VB中那样的变量数据类型。字符变量中可以包含数字,但它们被视为文本,通常左对齐,不能添加

在数据步骤中,SAS变量不必像在其他语言(如VB)中那样显式声明。一旦引用它们,就会创建它们。引用它们的上下文决定它们是字符还是数字

/* This creates a numeric variable */
data MyDataset;
    x = 1;

/* This creates a character variable */
data MyDataset;
    x = '1';
如果您试图将两种不同的数据类型分配给同一个变量,SAS会感到困惑,但它会以一种有很好文档记录的方式继续前进。如果没有代码片段,可能发生在您身上的情况如下所示:SAS在T和M值处咳嗽,但自己刷掉并保持尊严,但输出数据集的观测值2和3设置为缺失

data MyDataset;
    x = 12; output;
    x = 'T'; output;
    x = 'M'; output;
    x = 12; output;
    x = 3112; output;
    run;
日志将包含以下消息:

注:字符值已在以下位置转换为数字:(行):(列)9 14:9
注:第13行第9列的数字数据“T”无效。 注:第14行第9列的数字数据“M”无效。 x=3112 ERROR=1 N=1注:数据集WORK.MYDATASET有5个观察值和1个变量

SAS通过使用
length
语句显式声明变量,为您提供了绕过这种情况的选项

data MyDataset;
    length x $ 4 y 8;
    x = '1234'; y = 1; output;
    x = 'ABCD'; y = 2; output;
通过对SAS数据集执行
proc contents
,可以查看变量是字符还是数字:

proc contents data=MyDataset;
这将创建以下输出,为简洁起见,我对其进行了编辑:

The CONTENTS Procedure Data Set Name WORK.MYDATASET Observations 2 Member Type DATA Variables 2 Engine V9 Indexes 0 Alphabetic List of Variables and Attributes # Variable Type Len 1 x Char 4 2 y Num 8 内容程序 数据集名称WORK.MYDATASET观测值2 成员类型数据变量2 引擎V9索引0 按字母顺序排列的变量和属性列表 #可变型透镜 1 x 4字符 2 y数字8
也可以通过阅读SAS系统上的介绍性文本和文档来回答您的问题。

这里有一个关于PROC FREQ的小问题,可以解释您遇到问题的原因。默认情况下,PROC FREQ将忽略缺少的值。示例中的两个非数字值都是单字母,因此数字变量可能使用了特殊的缺失值

如果是这样,您可以将
缺失
打印错误
选项添加到
表格
语句中

missing t m ;
data test ;
  input @1 text $4. @1 numb 4. ;
cards;
T
M
12
3112
;

proc freq ;
  tables text numb ;
  tables numb / missing ;
run;

这是Excel中的吗?您对PROC FREQ行为的描述是错误的。你能发布示例数据吗?如果变量既有数字又有字符,则该变量为字符变量。变量不能同时为字符和数字,如果单个条目为字符,则该变量为字符,proc freq应适用于该字符。