收藏 分享(赏)

SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc

上传人:scg750829 文档编号:9155960 上传时间:2019-07-25 格式:DOC 页数:30 大小:341KB
下载 相关 举报
SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc_第1页
第1页 / 共30页
SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc_第2页
第2页 / 共30页
SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc_第3页
第3页 / 共30页
SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc_第4页
第4页 / 共30页
SAS培训班讲义Word版(与PPT版内容相同,方便打印使用).doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、 Made by Daibingchuan and lihui 1课 程名称: 数据处理数据类型a. 横截面数据集(cross-sectional data set):即给定时点对个人、家庭、企业、国家或一系列其他单位采集的样本所构成的数据集(应该忽略细小的时间差别)名词术语1、数据集:数据的集合,由样本(行)和变量(列)组成b.时间序列数据集(time series data set):是由一个或几个变量在不同时间的观测值所构成的。c.混合横截面数据集(pooled cross section data set):有些数据既有横截面数据的特点又有时间序列的特点,但每一时点的样本不同。d.综列

2、数据集(panel data set):由横截面数据集中每个样本的一个时间序列组成。 (定点长期调查)其他专门数据类型:1、离散数据(discrete data):通常在考察个人、家庭或企业的决策行为时,通过问卷调查获得,由此发展出“离散选择模型”2、持续数据(survival data):用于考察变量从开始到结束或调查终止前所经过的时间长度,如失业持续时间、罢工持续时间、甚至怀孕间隔 3、cohort( 一代人) data - 为持续收集特定社会群体在一段时间内的变化的数据。如:调查七十年代出生的样本在 10 年间的汽车持有率数据或就业率数据等。SAS 工作空间程序窗口(PROGRAM ED

3、ITOR)运行记录窗口(LOG)输出窗口(OUTPUT)SAS 程序第一例SAS/HelloWorld.sas注:以后程序文件省略后缀,直接简记为文件名称,如此例简记为 HelloWorld,需要说明文件类型时才标明后缀。SAS 程序的书写格式1、SAS 程序由语句组成,语句用分号结束。2、SAS 语句可以从某一行的任意位置开始; 3、几个 SAS 语句可以写在同一行上,但每句要使用分号4、一个语句也可以写成几行,只要语句中的单词不被断开就可以。在一个语句中各个单词之间至少要有一个空格。5、SAS 程序中一般不区分大小写(字符串中要区分大小写)6、用 /*注释的内容*/ 来对程序进行注释SAS

4、 程序的结构SAS 数据集样本(观测、记录) 、变量(字段、域) 、表(数据集) 、 数据库许多 SAS 语句都是以关键词开始并用它识别语句的类型(如 data、input、proc)绝大部分的 SAS 语句都可分为两步:DATA 步和PROC 步SAS 的变量及格式变量属性(名称、类型、长度、输入格式、输出格式、标签)类型:数字型、字符串型输入格式:数据被 SAS 读取的格式输出格式:数据呈现给人们的格式SAS 程序第二例SAS/orange.sasdata oranges;input variety $ flavor texture looks;total=flavor+texture+l

5、ooks;label total=“总数“;cards;navel 9 8 6temple 7 7 7valencia 8 9 9mandarin 5 7 8;proc sort data=oranges;by descending total;run;proc print data=oranges;var _numeric_;Made by Daibingchuan and lihui 2/* var _character_;*/title 对ORANGES数据集的品尝结果;run;输入数据-形成数据集-排序- 打印显示SAS 文件及命名1、SAS 数据集文件(后缀为 sas7bdat)2、

6、SAS 程序文件(后缀为 sas)3、SAS 日志文件(后缀为 log)4、SAS 输出文件(后缀为 list)临时数据集和永久数据集SAS 文件的 2 级命名方式:目录.文件名work 目录和其他目录使用 Libname 语句创建永久数据集,libname 自建目录名 目录地址;libname 例libname zhao d:sas;data zhao.aa;input a ;cards;1;run;建立 SAS 数据集的 5 种方法1.date 己输入数据建立。Orange 例2、data 步利用 set 语句建立。 Set 例data abc;set sasuser.business;r

7、un;proc print;run;3、从外部调入。Infile 例data abcd;infile D:SASdataxxxx.dat;input a b c;run;proc print;run;4、利用“导入数据” 功能建立。Id.xls 例5、利用 EFI(external file interface)功能导入。Column.dat 例 tests.dat 例comma.dat 例SAS 运算符(operator例)算术运算符: * / *比较算符:=(EQ) =(NE) (GT) =(GE) (最大值) |(!)(连接)字符的比较(operator_char 例)1、按机器使用的字

8、符排列次序 (ASC)从左到右被比较。2、两个不等长的字符串被比较时,系统在较短的字符串后自动添上空格3、在比较符后加冒号,则只比较首字母运算次序一在括弧里的表达式先计算第一级:* ( )前缀 第二级:* /第三级: 第四级:|第五级:其余比较算符第六级:第七级:运算次序二对于相同优先级的算符,左边的运算先做。但有两个例外:1.对最高优先级,右边的运算先做Made by Daibingchuan and lihui 32.当两个比较算符围着一个量时,这个表达式看成是有一个 and 出现一样被计算。如:12ageRun;Rename 选项负责改名;in 选项产生变量负责记录观测来自该数据集;见

9、set2 例data a;input id ming $ sex $ ;cards;1 MARY F 3 ANN F 4 TOM M;data b;input id name $ sex $ ;cards;2 JOSE F 5 ERIE M 6 MAY F 1 MARY M; data result;set a(rename=(ming=name) b(in=inb);*by id;if inb=1 then bonus=100;run;proc print;title串接数据集;run;串接数据的三种形式:1、相同变量的数据集连接2、不同变量的数据集连接3、按顺序连接数据集,即连接数据集后,

10、再按某变量的值进行排序,这种情况不允许排序变量有重复的值。Merge 语句使用 Merge 语句并接多个数据集,形式如下Data 数据集;merge 数据集 1 数据集 2 ;by 变量;run;见 merge 例data person;input name $ sex $;cards;MARY FANN FTOM M;data place;input name $ city $ region;cards;MARY MIAMI 2ANN TAMPA 6JOSE ERIE 5MARY TAMPA 7; /*proc sort data=person; by name;proc sort data

11、=place; by name;*/data result;merge person place;*by name;proc print;titleDATA SET RESULT;run;并接数据的两种形式:1、没有 BY 语句的合并 (横连 )2、带有 BY 语句的合并 (允许排序变量有重复的值 )Update 语句Update 语句用一个升级数据集中的观测来修改一个主数据集。Update 语句一定要与 BY 语句一起使用,BY 语句给出Made by Daibingchuan and lihui 8了合并观测时共同变量的名字主数据集中的共同变量必须是单值的,即不能有两个或两个以上的观测其共

12、同变量值相同Update 例data a;input id name $ sex $;cards;1 zxs m2 zjy m3 zm f;data b ;input id name $ sex $ sales;cards;1 zxs f 34;data c;update a b;by id ;run;proc print;run;Infile 语句Delimiter (DLM)选项:规定一个字符替代空格作为分隔符。Firstobs 选项 :不是从文件的第一个记录开始,而是从指定行开始读取记录Obs 选项:规定用户想从输入文件中连续读取的最后一个记录号Infile(dlm)例data new1

13、;infile cards delimiter=,;input x y z;cards;1,2,34,5,6;data new2;infile cards dlm=ab;input x y z;cards;1aa2ab34bb5ba67a8b9;run;proc print data=new1;run;proc print data=new2;run;Infile(obs)例data abc;infile D:SASdata数据处理column.dat firstobs=2 obs=3;input a $9.;run;proc print;run;Infile 语句DSD 选项:1、使最外层引

14、号括起的内容当成整个字符串输入,并去除最外层引号2、默认分隔符为逗号3、两个相邻的分隔符意味着前一个分隔符后的字段为缺失值Infile(dsd)例 (回顾 input2 例)data;infile cards dsd;input x:$15. y;cards;“im a student“,;run;proc print;run;Infile 语句当行末尾数据宽度少于规定宽度时Flowover: 默认选项,将下一条记录读入Missover:将变量置为缺失Truncover:将数据直接读入,不管宽度是否少于规定宽度Stopover:系统终止数据步执行,报告出错Made by Daibingchua

15、n and lihui 9Lrecl=n 选项:设定源数据文件行的物理长度,缺省为256,最大可设为 32767Pad | Nopad 选项:pad 选项指当宽度少于规定宽度时,在后面填充空格至 Lrecl=n 规定的行长度,缺省为 nopadMissover 例data;infile D:SASdata数据处理missover.dat;/*flowover missover truncover stopover pad*/input x 5.;run;proc print;run;调查数据处理的多选题案例利用 infile 语句的 missover 选项和 pad 选项处理N6007.dat

16、。题目:您常用的电器有:(灯、电饭煲、厨灶、电视、收音机、立体音响、冰箱、电熨斗、电扇、电暖气、空调、水泵、热水器、电脑、微波炉、排油烟机)运行(算) 语句赋值语句和累加语句赋值 Variable = expression例:x=a + b;累加 Variable + expression例:if x=5 then n+1;例:n+(-1)累加语句中的变量必须是数值型变量,初始值为 0Delete 和 lostcard 语句Delete 语句告诉 SAS 系统停止处理当前的观测,并且返回到这个 Data 步的开头处理其他观测当 SAS 系统遇到用几个记录表示一个观测的时候,数据中有丢失记录时,

17、使用 Lostcard 语句来重新对准输入数据delete 例data jn;input a b c;file print;put _n_;if a3 then delete;*put _n_;*total=a+b;cards;1 2 33 3 25 3 13 3 3;proc print;run;lostcard 例data ins;input id 1-3 reject 8-10 #2 idc 1-3 pass;if id ne idc then lostcard;/*如果是delete语句,则input 语句对应的两条记录同时删除*/cards;301 32301 61432302 53

18、302 83171400 92845411 46411 99551;proc print;title 每个观测包括两个数据行;run;Stop 和 abort 语句用 stop 语句来停止处理 data 步,正被处理的那个观测没有添加到 SAS 数据集中,stop 语句不影响后面的任意data 步或 proc 步的执行用 abort 语句来中止 SAS 系统执行当前 DATA 步,return 选项关闭 SAS 并返回操作系统。Stop 与 abort 的区别在于 abort 语句置_error_变量为 1Abort 例data check;input ssn 1-3 pay;Made by

19、Daibingchuan and lihui 10if ssn=222 then abort return;/*abort return;stop*/put _all_;cards;111 100222 200444 300;data a;input b;cards;12345;proc print data=a;run;Where 语句从已存在的 SAS 数据集选择子集,在把观测读入之前规定数据必须满足一个条件Where 语句与 if 语句相比在读取数据时更为高效,因其在移动所有观测到子集之前先选择数据。Where 语句丰富的表达式where 例data sasuser.business;i

20、nput employs industry $;cards;20 Food50 Food61 Elec62 Elec. oil80 oil63 oil;run;data aa;set sasuser.business;*where employs50;*where industry=Food;*where employs between 50 and 70;*where employs in (61,62);*where employs is missing;*where industry ? Ele; /* ? means “contains“*/where industry like %i

21、%; /* % can substitute many char*/ *where industry like O_l; /* _ can substitute one char*/run;proc print;run;Output 语句DATA 步的每次迭代,后台自动使用 output 语句,但如果程序中主动加上 output 语句,即相当于取消自动output 语句,变成在条件符合时输出。output 例data;input a b;if a=1 then output;put _n_;cards;2 31 52 41 6;run;proc print;run;用到 output 语句其他

22、情况:output1 例data year81 year82 year83;input year x1-x2;if year=1981 then output year81;else if year=1982 then output year82;else if year=1983 then output year83;cards;1981 1 21982 2 31983 3 4;run;proc print;run;quit;Made by Daibingchuan and lihui 11output 2 例data repeat;infile cards;input subject $

23、meal1-meal3;drop meal1-meal3;mea=meal1;output;/*把meal1的值赋给mea*/mea=meal2;output;mea=meal3;output;cards;a 2 5 4b 3 6 2;proc print;run;output 3 例data pay;input area amount;cards;111 100111 25333 160333 80777 142.66;proc sort data=pay;by area;data subtotal;set pay;by area;if first.area then total=0;tot

24、al+amount;drop amount;if last.area then output;run;proc print;run;1.从一个输入的数据文件中,创建几个 SAS 数据集2.从输入的每个数据行中,创建二个或更多个观测3.把几个输入观测组合并成为一个观测后面接名字表示输出到指定数据集,但名字必须也在DATA 后出现Call 语句调用其他子程序call routine (parameter-1 )如 SAS 提供一系列随机数子程序发布操作系统命令call system (command) Call 例data a;seed1=161321804;/*赋予随机数种子初始值*/seed2

25、=135279821;do i=1 to 5;x1=ranuni(seed1);x2=ranuni(seed2);output;end;proc print;title 使用随机函数 ;run;data b;seed3=161321804;seed4=135279821;do i=1 to 5;call ranuni(seed3,x3);/*seed3存放种子值 x3为随机数变量名*/call ranuni(seed4,x4);output;end;proc print;title 调用随机数子程序,产生2 个随机数流,并能观测到当前随机数种子值;run;Call_system 例data _

26、null_;call system(dir *.*);run;控制语句Do 语句( 循环语句)DO 语句规定,在 DO 后面直到出现 END 语句之前的这些语句作为一个单元被执行。Made by Daibingchuan and lihui 12简单 DO 语句,常用在 if-then/else 语句里循环 DO 语句,用下标变量规定重复次数do i=1 to 10;do i=1 to exit;do i=2 to 8 by 2;Do_simple 例data do;input x ;file print;if x5 then do;y=x*10;put x= y=;end;cards;167

27、;proc print;run;do 例data a;input x ;do class=1 to 4;y=4*x;output;end;cards;11 22 33 44 55 66;run;proc print;run;do_exit 例data iteratel;input x ;exit=10;do i=1 to exit;seed=1;call ranuni(seed,y);z=x*y;if z25 then i=exit;output;end;cards;5 1000 2500;proc print;run;Do while 语句当条件成立时重复执行 Do 组里的语句Do whil

28、e (expression);括号里的表达式在 Do 组里的语句被执行前在循环的开头被计算。如果表达式是真的,Do 组被执行Do while 例data while;n=0;do while (n=4);file print;put n=;n+1;end;run;Select 语句允许 SAS 去执行几个语句或者语句组中的一个。当一个特殊条件为真时,执行对应 when 语句,如果所Made by Daibingchuan and lihui 13有 when 条件均不成立,选择执行 otherwise 语句,用end 结束Select(when)例data old;input grade $

29、;cards;A B1 B2 B3 C D;run;data new;set old ;x=1000;select(grade);when(A) salary=x*1.5;when(B1,B2,B3) salary=x*1.3;when(C) salary=x*1.1;otherwise salary=x;end;run;PROC PRINT;RUN;If 语句1. 形如: IF expression THEN statement;ELSE statement;2.形如:IF variable例:if x then y=x;当变量 x 的值为 0 和缺失之外的任意值时表达式均为真If_else

30、 例data;input x ;if x=1 then y=x;else if 2 例 array simple3 red green yellow;array x5,3 score1-score15;array c3等价于 array c3 c1-c3array test3 t1 t2 t3 (90 80 70) 数组中的变量必须全是数值型或字符串型,array 例data;array x3 a b c (1 2 3); file print;put x1= x2= x3=;run;data;array x2,3 aa bb cc dd ee ff(1 2 3 4 5 6);file pri

31、nt;put x2,1=;run;data;Made by Daibingchuan and lihui 16array x2 $ aaa bbb(data process);file print;put x2=;run;data;array x6:9,0:9 x60-x99;file print;put x7,0;run;规定数组中每一维的上下界:array x1:5,1:3 score1-score15;*表示 SAS 系统通过数组中变量的个数来确定下标。可用 dim(数组名)函数计算数组元素个数。_temporary_建立一个临时数组元素列表array(dim)例data zz;inpu

32、t d1-d7;array day(*) d1-d7;do i=1 to dim(day);day(i)=day(i)+10;end;drop i;cards;99 11 22 222 22 3 44 1 2 3 4 5 6 7;run;PROC PRINT;RUN;array(temporary)例data a;input var1 var2 var3;cards; 10 20 30100 . 300. 40 400;run;data b(drop=i);set a;array array1(3) _TEMPORARY_ (.1 .2 .3) ;array array2(3) var1 va

33、r2 var3;/*a*/do i=1 to 3;if array2(i)=. then array2(i)=array1(i);end;proc print;run;array(prod)例data a;input x1-x5;cards;1 2 3 4 52 3 4 5 64 5 6 7 8;run;data b;set a;array test(5) x1-x5;prod=0;do i=1 to dim(test)-1;if i=1 then prod=test(i);prod=prod*test(i+1);end;proc print;run;隐含下标 array 语句 形如:ARRA

34、Y array-name array-elements 如果没有规定下标变量,SAS 系统使用自动变量_i_ 作为下标变量,下标变量范围从 1 到这个数组元素的个数如:array x x1-x5Array(s)例data test;input sco1-sco5;array s sco1-sco5;do _i_ =1 to 5;s=s*100;end;cards;0.95 0.88 0.57 0.90 0.651 2 3 4 5;run;Made by Daibingchuan and lihui 17PROC PRINT;RUN;Do over 语句Do over 语句对每个数组元素自动地执

35、行 Do 组中的语句,它等价于 do i=1 to k;其中 i 是这个数组的下标变量, k 是数组元素的个数。Do over 语句常用在对隐含下标数组元素执行 Do 组里的语句Do over 例data test;input sc01-sc05;array s sc01-sc05;do over s;s=s*100;end;cards;0.95 0.88 0.57 0.90 0.651 2 3 4 5;PROC PRINT;RUN;Informat 语句 Informat 语句把输入格式与变量联系起来,在data 步,可以用 informat 语句对 input 语句中列出的变量规定缺省时的

36、输入格式informat 例data infex; informat default=3.1 default=$char4. x1 2.2;input x1-x5 name $;file print;put x1-x5 name;cards;11 22 33 44 100 Johnny;run;Format 语句 在 data 步把变量同输出格式联系起来 可以规定缺省选项,如:format default=8.2;Format(informat)例data;informat a dollar9.;/*必须指定,否则不能识别数据*/format a comma9.;input a ;cards;

37、$1900000;run;proc print;run;format_=例data ff;format header $7. name $8.;input header= name=;cards;header=zxs zjy name=zhou aaaheader=123 name=aaa;run;proc print;run;Drop 和 keep 语句 Drop 语句:删掉变量语句drop variable-list Keep 语句:保留变量语句keep variable-list 虽然出现在 drop 和 keep 语句中的变量不包含在正被创建的 SAS 数据集中,但这些变量仍可以用在程

38、序语句中 Drop 和 keep 不能同时使用Retain 语句 使用 retain 给变量赋予初值,并保留到读下一个观测retain month1-month5 1retain var1-var4 (1,2,3,4)当 retain 后无变量时,用 input 或赋值语句创建的所有变量的值,保留上次 data 步执行的值Retain 例data retire;Made by Daibingchuan and lihui 18input amount ;retain year 1994 total 0;year=year+1;total=total+amount;/*total=sum(tot

39、al,amount)*/*可用下列语句代替retain year 1994;year+1;total+amount;*/cards;500 1000 1500 2200 2700;run;proc print;run;retain2 例data group;input x;retain;if x=1 then sex=M;if x=2 then sex=F;cards;1232;run;proc print;run;Attrib 语句 在 data 步内允许用一个 attrib 语句来规定一个或几个变量的输出、输入格式,标签和长度,即规定变量属性 Attrib x label=中国载人飞船le

40、ngth=4informat=8.5format=8.2;Attrib 例data a;input x ;attrib x label=中国载人飞船length=8informat=comma8.format=dollar12.;cards;12,345,678;run;proc print;run;Window 语句 创建用户专用的窗口,可用来显示文字说明或接受输入的数据Window 例data _null_;window start#5 26 welcome to the sas system color=yellow#7 19 this program creates two sas d

41、ata sets#8 26 and uses three procedures#12 27 press enter to continue;display start;stop;run;上机练习 1 编制程序:六个变量 id d1-d5,数据节选如下:1 2 7 23 100 10002 3 33 54 56 10003 . 4 6 44 100 要求:如果相邻数据小于等于 7,则置为缺失,数据结果应如下: 1 . . 23 100 10002 3 33 . . 10003 . . . 44 100上机练习 2(ex2 例) 编制程序:3 个变量 d1-d3,数据节选如下:1 2 7 2 3

42、. Made by Daibingchuan and lihui 193 . 4 要求:如果发现缺失值 ,即用该列数据的平均值来代替,数据结果应如下: 1 2 7 2 3 5.5 3 2.5 4 Proc 步的通用语句(Reg例) Proc 用在 proc 步的开头并规定用户使用的SAS 过程名字及其他信息 Var规定用这个过程分析的一些变量 Model规定在模型中类似表示因变量(左)和自变量(右)的这样一些变量及其他信息 Weight规定一个变量,它的值是这些观测的相应权数 Freq规定一个变量,其值表示频数 Id规定一个或几个变量,他们的值在打印输出中或由此过程产生的 SAS 数据集中用来

43、识别观测 Where在 SAS 把观测引入 proc 步之前,用来选择符合特殊条件的观测 Class在分析中指定一些变量为分类变量 By规定一些变量,SAS 过程对输入数据集用 by变量定义的几个数据组分别进行分析处理 Output给出用该过程产生的输出数据集的信息 Quit结束交互式的过程 其他如 Attrib 属性语句、format 输出格式语句、label 标签语句等Reg 例data insurance;input id y x1 x2;label id=“序号“ y=“人寿保险额(千元)“ x1=“年人均收入(千元)“ x2=“风险反感度“;cards;1 19.6 66.290 7

44、2 6.3 40.964 53 25.2 72.996 104 8.4 45.010 65 12.6 57.204 46 1.4 26.852 57 4.9 38.122 49 26.6 75.796 910 4.9 37.408 511 10.5 54.376 212 9.8 46.386 713 7.7 46.130 414 1.4 30.366 315 5.6 39.060 516 24.5 79.380 117 13.3 52.766 818 13.3 55.916 6;proc reg;model y=x1 x2;run;Transpose(转置过程) Transpose 过程完成对

45、 sas 数据集的转置,即把观测变为变量,变量变为观测。 Out 选项规定输出数据集 Prefix 选项规定转置后的变量名前缀 Id 选项使用其后规定的变量值作为输出数据集中被转置的变量名Transpose 例title;data aaa;input m1-m3 x $;cards;2 2.5 5.5 a;run;proc transpose data=aaa out=zzz;var m1 m2 m3 ;*id x;run;proc print data=zzz;run;Means 均值过程 计算数据集中数值变量的简单统计量 T 选项:检验数据总体均值为 0 的假设时,t 统计量的值 Prt

46、选项:Prob |T| , 数据总体均值为 0 的概率是多少 默认生成的_type_和_freq_变量分别规定分组数(如果有)和频率Made by Daibingchuan and lihui 20Means 例data x;title 与正常体重的偏差;input x ;cards;-7 -2 1 3 6 10 15 21 30 ;proc means data=x maxdec=2 n range mean median std stderr t prt;output out=x1 mean=X_mean std=X_std;run;proc print data=x1;run;weigh

47、t 例data;input class $ a amount;cards;a 3 0.8b 4 0.2;run;proc means n mean;var a;weight amount;run;freq 例data;input class $ a amount;cards;a 3 3b 4 2;run;proc means n mean;var a;freq amount;/*freq后规定的变量,其值不能小于1*/run; Maxdec 选项规定输出结果的小数部分最大位数 可以输出的统计量:N, Nmiss, mean, std, min, max, range, sum, var, us

48、s, css, cv(变异系数), stderr, t, prt, sumwgt, skewness(偏度), kurtosis(峰度), clm(置信限), lclm(置信下限), uclm(置信上限)Format 过程(format_num,char,lowhigh 例) 使用 Format 过程把输出格式同 Data 步、Proc步的变量联系起来。 输出格式一:SAS 格式 输出格式二:Format 定义的格式,形如 value 格式名 变量值=自定义值;proc ;format 变量 格式名.;format_char 例proc format;value $grade a=goodb-d=fairf=poori,u=see instructorother=misco

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报