读入数据时,INPUT var1 $12. 和Informat var $12. 的区别

本文通过三个示例程序对比了SAS中不同方式指定变量长度的影响,包括默认长度、INPUT语句指定长度及INFORMAT语句指定长度,揭示了正确配置变量长度的重要性。

(1)读入数据时,INPUT var1 $12. 和Informat var $12. 的区别

如读入数据集:

Albany/NY/43/-74 Albuquerque/NM/36/-106 Amarillo/TX/35/-102 Anchorage/AK/61/-150 Annapolis/MD/39/-77 Atlanta/GA/34/-84 Augusta/ME/44/-70 Austin/TX/30/-98 Baker/OR/45/-118 Baltimore/MD/39/-76 Bangor/ME/45/-69 Baton Rouge/LA/31/-91 Birmingham/AL/33/-87 Bismarck/ND/47/-101 Boise/ID/43/-116

程序1:

DATA dataset1;

       INFILE '..../../aa.txt' DLM='/'; 

      INPUT var1 $  var2 $ var3 var4;

RUN;

程序2:

DATA dataset1;

       INFILE '..../../aa.txt' DLM='/'; 

      INPUT var1 $12.  var2 $2.  var3 var4;

RUN;

程序3:

 

DATA dataset1;

       INFILE '..../../aa.txt' DLM='/';

      INFORMAT var1 $12. var2 $2.;

     FORMAT var1 $12. var2 $2.;

      INPUT var1 $  var2 $  var3 var4;

RUN;

 

执行程序1的结果:
Obs
Var1
Var2
Var3
Var4
1
Albany
NY
43
-74
2
Albuquer
NM
36
-106
3
Amarillo
TX
35
-102
4
Anchorag
AK
61
-150
5
Annapoli
MD
39
-77
6
Atlanta
GA
34
-84
7
Augusta
ME
44
-70
8
Austin
TX
30
-98
9
Baker
OR
45
-118
10
Baltimor
MD
39
-76
11
Bangor
ME
45
-69
12
Baton Ro
LA
31
-91
13
Birmingh
AL
33
-87
14
Bismarck
ND
47
-101
15
Boise
ID
43
-116
 
执行程序2的结果
 
Obs
Var1
Var2
Var3
Var4
1
Albany/NY/43
/-
74
.
2
Amarillo/TX/
35
-102
.
3
Annapolis/MD
/3
9
-77
4
Atlanta/GA/3
4/
-84
.
5
Austin/TX/30
/-
98
.
6
Baltimore/MD
/3
9
-76
7
Bangor/ME/45
/-
69
.
8
Birmingham /A
L/
33
-87
9
Bismarck/ND/
47
-101
 
 
执行程序3的结果
Obs
Var1
Var2
Var3
var4
1
Albany
NY
43
-74
2
Albuquerque
NM
36
-106
3
Amarillo
TX
35
-102
4
Anchorage
AK
61
-150
5
Annapolis
MD
39
-77
6
Atlanta
GA
34
-84
7
Augusta
ME
44
-70
8
Austin
TX
30
-98
9
Baker
OR
45
-118
10
Baltimore
MD
39
-76
11
Bangor
ME
45
-69
12
Baton Rouge
LA
31
-91
13
Birmingham
AL
33
-87
14
Bismarck
ND
47
-101
15
Boise
ID
43
-116
 
 
 分析:
程序1:未指定读入变量的长度,则SAS默认为字符型变量的长度为8,因此,后面观测读入时被自动切断,仅读入8个字符;
程序2:在INPUT语句中指定字符串的长度,则SAS在扫描源文件时,严格按照INPUT语句指定的长度进行读入;
程序3:在INFORMAT语句中指定字符串的长度,表明SAS系统给该变量分配的存储空间,读入时则按照分隔符先读入数据,然后按照定义的长度存储。
### Spire.PDF for .NET 使用教程 #### 创建带标签的PDF文档 带标签的 PDF(也称为 PDF/UA),是一种包含底层标签树(类似于 HTML)的 PDF,用于定义文档的结构。这些标签可以帮助屏幕阅读器浏览整个文档而不会丢失任何信息。 为了创建带有标签的 PDF 文档,在 C# 或者 VB.NET 中可以通过如下方式实现: ```csharp using Spire.Pdf; using Spire.Pdf.Graphics; class Program { static void Main(string[] args) { PdfDocument doc = new PdfDocument(); // 添加页面并设置内容 PdfPageBase page = doc.Pages.Add(); String text = "这是一个测试文本"; float y = 180f; foreach (string line in text.Split('\n')) { y += 20; page.Canvas.DrawString(line, new PdfFont(PdfFontFamily.Helvetica, 12), PdfBrushes.Black, 0, y); } // 设置标签化选项 doc.Tagged = true; // 将文档保存到磁盘上指定路径 string output = "TaggedSample.pdf"; doc.SaveToFile(output); Console.WriteLine($"已成功创建 {output}"); } } ``` 此代码片段展示了如何通过 `doc.Tagged` 属性来启用标签功能,并最终将生成的结果存储为名为 TaggedSample.pdf 的文件[^2]。 #### 合并多个不同类型的文件至单一PDF Spire.PDF 提供了一个简单的方法来把各种格式的数据组合成单个 PDF 文件。这使得开发者能够轻松地集成来自不同源的信息而不必担心兼容性问题。 下面是一个简单的例子说明怎样利用这个特性: ```csharp // 加载第一个输入文件作为基础模板 PdfDocument baseDoc = new PdfDocument(); baseDoc.LoadFromFile("input.docx"); foreach(var filePath in otherFilesPaths){ var tempDoc = new PdfDocument(); switch(Path.GetExtension(filePath)){ case ".pdf": tempDoc.LoadFromFile(filePath); break; case ".xls": // 转换成 pdf 并加载... break; default: throw new NotSupportedException($"{Path.GetExtension(filePath)} 不支持"); } // 进行合并操作 baseDoc.AppendPages(tempDoc); } baseDoc.SaveToFile("MergedOutput.pdf", FileFormat.PDF); Console.WriteLine("所有选定文件已被合成为一个新的 PDF!"); ``` 这段程序会遍历给定列表中的每一个文件名字符串数组 (`otherFilesPaths`) ,依据扩展名判断其类型后分别读入相应的临文档实例(`tempDoc`)中;最后再把这些页追加到底层的基础文档里去完成整体拼接工作[^3]。 #### 修改现有PDF版本号 有可能需要调整已有 PDF 文件所遵循的标准版本。例如当目标设备仅能解析特定范围内的 PDF 标准就显得尤为重要了。借助于 Spire.PDF 库可以很容易做到这一点: ```csharp // 打开原始 PDF 文件 PdfDocument document = new PdfDocument(); document.LoadFromFile(@"example_v1_4.pdf"); // 更改 PDF 版本为最新版即 v1.7 document.FileInfo.Version = PdfVersion.V1_7; // 另存修改后的副本 document.SaveToFile("updated_version_example.pdf",FileFormat.PDF); Console.WriteLine("PDF 版本更新完毕."); ``` 上述脚本先打开一个叫做 example_v1_4.pdf 的旧版 PDF 文件,接着改变它的内部版本标识符使其符合最新的标准——v1.7,之后再次储存回本地硬盘形成一个新的修订版本 updated_version_example.pdf[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值