スタタ:正規表現とテキスト分析



Stata Regular Expressions




著者:水泳ワンハイ(福州大学)( ほとんど知っている | 短い本 | コードクラウド )。




スタタウィンターホリデークラス
Lian Yujun-Jiang Yu、スピーカー、2019年1月17〜27日、北京




されている プライマリクラス !! されている 上級クラス |
されている 紙のクラス | されている フルコース




画像



価値に関連するコンテンツをすばやく見つける方法について、会社の年次報告書を提供します。仲良しの友達は、見栄えの良い映画、DoubanのWebサイトから各映画の評価をすばやくダウンロードする方法をお勧めします。ここでの問題は、テキストデータから必要な情報をどのようにマイニングするかです。 されている 真ん中の文字関数はこの操作の実装を容易にし、詳細を渡すことができます。help string_functions特定の使用法と例を参照してください。この記事は主に文字関数の正規表現関数を対象としています( 正規表現 )。

されている 14の以前のバージョンの主な正規表現関数は次のとおりです。regexmregexr with regexsreg 定期的に、 前者 式を表します。一致は主に、POSIX.2標準と同様に、ヘンリースペンサーのNFAアルゴリズムに基づいています。

regexmm 代表 一致 - - -一致。



regexrr 代表 交換 -----交換。

regexss 代表 部分式 -----傍受。

されている 14以前のバージョンは通常のバージョンしか処理できません ASCII 文字(a-z、A-z)、数字(0-9)、通常の句読文字などの文字。 されている 14以降のバージョンは、エンコーディング変換を強化します( ユニコード )、他の一般的でないエンコーディングを処理できます ASCII 中国語、日本語、韓国語などの文字。対応する、 されている 14正規表現用のいくつかの新しいコマンドが導入されました。

されている 14バージョンの主な正規表現関数は次のとおりです。ustrregexmustrregexrfustrregexra ustrregexsで、 unstr 代表 Unicode文字列

ustrregexm :一致

ustrregexrff 代表 最初 。初めて表示される一致する文字のみが置き換えられることを示します。

ustrregexra 代表 すべて 。一致するすべての文字の置換を表します。

ustrregexs :インターセプト

したがって、 されている 14によると、正規表現の機能が強化されました。 シーケンスPOSIX文字クラス 一致するのを待ちます。以下、1つずつ説明します。

I.コマンドの基本構文

この記事 されている たとえば、以前のバージョンの14の3つの主要な正規表現コマンドは、次の構文で記述されています。

画像

上記の構文からわかるように、これらのコマンドを正しく使用するための重要なポイントは、テキストの値に関連するコンテンツを照合するなど、照合するルールを入力する方法です。 0-9 の場合、コマンドは次のように記述できます。

clear input str10 income 'abc' 'ab' 'aa' 'abcd' 'aad' 'aab123' 'cdf12345' '123' 'Abc' end Gen index1 = regexm(income,'[0-9]') /* [0-9] means the value */

これに基づいて、このペーパーの次のセクションでは、主に、それぞれ一致するコンテンツの関連規定について説明します。 メタ文字シーケンスキャラクタークラス定量化POSIX文字クラス 待つ
ラインが紹介されています。

基本的なルール

(1)メタ文字

メタ文字とは、*を含む特殊なタイプの文字を指します。 + ? ^ $ | ( ) [ ] { } 待つ。これらの文字に一致するものは、前に追加する必要があります

例えば:

clear input str3 num str2 name str10 per str6 income -1 a '10%' '[9747' 1 b '62%' '1,234' 1 a '53%' '938.9' -1 c '48,6%' '*8344' 2 d '58%' '2398' -2 e '46%' '-' -3 c '78%' '53822' 3 d '92,2%' 'na' -1 e '65%' '$28477' 1 b '3,6%' 'n/a' end

マッチさせたい場合[*$特殊文字の一部については、次のコードを使用できます。

Gen index = regexm(income,'[') /* matches * with the [number] Gen index1 = regexm(income,'\$') /* matches */ with $ gen index2 = regexm(income,'[$]') gen index3 = regexm(income,'[$]') Gen index4 = regexm(income,'[`=char(36)']') /*Use charlist to view the corresponding code*/ Gen index5 = regexm(income,'*') /* matches */ with * Gen index6 = regexm(income,'[*|[]') /*| indicates or matches */ containing [number or *) list

特に注意が必要なのは$シンボルは特別で、Stataのグローバルマクロの参照を表すこともできるため、を追加することはできません。

(2)シーケンス

より一般的に使用されるシーケンスは次のとおりです。

d一致する数字

D数字以外の文字に一致する

sマッチングセパレーター(スペース)

S非スペーサー(スペースではない)に一致する

w単語の文字を一致させる

W単語以外の文字に一致する

一致する単語の境界

B単語以外の境界の一致

最初:D数値以外を示しますd表現値

前の例を振り返ると、テキストの値を含む部分を照合する場合は、次を使用できます。 0-9 、ここでも使用できますdマッチさせてください。例えば:

clear input str12 income '123' 'acb' '12a' end Gen index1 = ustrregexm(income,'D') /*D means non-numeric */ Gen index2 = ustrregexm(income,'d') /*D means the value */
秒:w Wで単語と単語以外の文字を表します。

単語文字は、アンダースコアを含む任意の単語文字(文字、数字、下線、漢字)です。つまり、[a-zA-Z_0-9]

clear input str64 income 'the dandelion war 2010' end gen make2 = income gen make3 = income replace make2 = ustrregexra(make2, 'w', '_') replace make3 = ustrregexra(make2, 'W', '_')
3番目: Bで位置の一致

表と裏の文字がすべてではない場合w (文字、数字、アンダースコア、漢字)、その逆の場合、の場合前面と背面の両方wの場合、一致しません。
上記の一致はすべて一致するコンテンツですが、ここに一致があります ポジション 。この一連のコマンドも非常に一般的です。以下の例を参照してください。

clear input str12 income 'abc' 'abc' '1ab' '1abc' 'ab_' 'ab' end

上記のデータが含まれています から 文字、最後の文字のみを照合する場合は、次のコマンドで次のことができるかどうかを確認してください。

Gen index1 = ustrregexm(income,'ab') /* is equivalent to gen index1 = regexm(income,'ab') */ list +-----------------+ | income index1 | |-----------------| 1. | abc 1 | 2. | abc 1 | 3. | 1ab 1 | 4. | 1abc 1 | 5. | ab_ 1 | |-----------------| 6. | ab 1 | +-----------------+

マッチング結果から、すべてを含める から 欲張り一致が続くため、要素は一致します( 貪欲 )モード。この場合、ポジションマッチを使用して資格を得ることができます。

gen index2 = ustrregexm(income,'ab') // Q: Is it equivalent to gen index2 = regexm(income,'ab')? gen index3 = ustrregexm(income,'ab') gen index4 = ustrregexm(income,'ab') list +--------------------------------------------+ | income index1 index2 index3 index4 | |--------------------------------------------| 1. | abc 1 1 0 0 | 2. | abc 1 1 0 0 | 3. | 1ab 1 0 1 0 | 4. | 1abc 1 0 0 0 | 5. | ab_ 1 1 0 0 | |--------------------------------------------| 6. | ab 1 1 1 1 | +--------------------------------------------+

うわー、index4が私たちが望んでいるものであることがわかります。これがポジションマッチの魔法です!さらに、位置の一致には、 ^$ 、開始位置と終了位置を一致させます。
例えば:

clear input str10 income 'abc' 'ab' 'aa' 'abcd' 'aad' 'a1' 'aab123' 'cdf12345' '123' end Gen index1 = regexm(income, '(^[a-z]+)([0-9]$)') /*^Putting outside the parentheses means starting with ... $ means ending */ . list +-------------------+ | income index1 | |-------------------| 1. | abc 0 | 2. | ab 0 | 3. | aa 0 | 4. | abcd 0 | 5. | aad 0 | |-------------------| 6. | a1 1 | 7. | aab123 0 | 8. | cdf12345 0 | 9. | 123 0 | +-------------------+

(3)キャラクタークラス

キャラクタークラスには主に次のものが含まれます。

[aeiou]任意の母音に一致します

[AEIOU]任意の大文字の母音に一致します

[0123456789]任意の単一の番号に一致します

[0-9]任意の数に一致します(同上)

[a-z]任意のASCII小文字に一致

[A-Z]任意のASCII大文字に一致

[a-zA-Z0-9]上記のクラスのいずれかに一致する

[^aeiou]小文字の母音以外の文字に一致する

[^0-9]数字以外の文字に一致する

clear input str10 income 'abc' 'ab' 'aa' 'abcd' 'aad' 'aab123' 'cdf12345' '123' 'Abc' end Gen index1 = ustrregexm(income,'[0-9]') /* [0-9] indicates the value, can you use d?*/ Gen index2 = ustrregexm(income,'[a-z]') /* [a-z] means lowercase */ Gen index3 = ustrregexm(income,'[aeiou]') /* aeiou for vowels */ When gen index4 = ustrregexm(income,'[^aeiou]') /* brackets [], ^ means negation, that is, aeiou*/ is excluded. Gen index5 = ustrregexm(income,'[A-Z]') /* [A-Z] means uppercase letters*/

(4)は数量を示します

表現には2つのタイプがあります。

最初の種類

{n}前の試合で一致するアイテムはnに一致します

{n,}以前に一致するアイテムはn以上に一致します

{n,m}前の試合で一致するアイテムは、少なくともnからmまで一致します

セカンドクラス

?一致する前の項目はオプションであり、最大で1つ一致します

*以前に一致するアイテムは、0以上に一致する可能性があります

+以前に一致するアイテムは、1つ以上に一致します

clear input str10 income 'abc' 'ab' 'aa' 'abcd' 'aad' 'a1' 'aab123' 'cdf12345' '123' end Gen index1 = ustrregexm(income, '[a]{1}') /*{1} means quantity, match a, {1} means 1 time here is greedy match, match as long as >=1 times*/ gen index2 = ustrregexm(income, '[a]{2}') gen index3 = ustrregexm(income, '[0-9]{2}') gen index4 = ustrregexm(income, '[0-9]{3}') gen index5 = ustrregexm(income, '[0-9]{4}') gen index6 = ustrregexm(income, '[0-9]{1,3}') gen index7 = ustrregexm(income, '[0-9]{4,5}') Gen index8 = ustrregexm(income, '[0-9]+') /*+ means 1 or more times*/ Gen index9 = ustrregexm(income, '[0-9]*') /* means 0 or more times*/ Gen index10 = ustrregexm(income, '[0-9]?') /* means 0 times or 1 time*/ Gen index11 = ustrregexm(income, '^[0-9]') /*^ placed outside the brackets to start with...*/ Gen index12 = ustrregexm(income, '(^[a-z]+)[1]$') /*If you only want to match **a1** original, start with a letter and end with a number*/ Gen index13 = ustrregexm(income, '(^[a-z]+)[0-9]$') /* The effect is equivalent to the previous command */

(5)POSIX文字クラス

POSIX文字クラスは、「[[]]」で囲まれた正規表現です。一般的なPOSIX文字クラスは次のとおりです。

[[:lower:]]小文字

[[:upper:]]大文字

[[:alpha:]]すべての文字([[:lower:]]および[[:upper:]])

[[:digit:]]番号:0、1、2、3、4、5、6、7、8、9

[[:alnum:]]文字と数字([[:alpha:]]および[[:digit:]])

[[:blank:]]空白文字:スペースとタブ

[[:cntrl:]]制御文字

[[:punct:]]句読点:! ”#%& ’()* +、-。 /:

[[:space:]]スペース文字:タブ、改行、垂直タブ、改ページ、キャリッジリターン、スペース

[[:xdigit:]] 16進数:0-9 A B C D E F a b c d e f

[[:print:]]制御文字([[:alpha:]]、[[:punct:]]およびスペース)

[[:graph:]]グラフィカル文字([[:alpha:]]および[[:punct:]])

clear input str10 income 'abc' 'aB' 'aa' 'abcd' 'Aad' 'a1' 'aab123' 'cdf12345' '123' end Gen index1 = ustrregexm(income, '[[:lower:]]') /*lowercase letters*/ Gen index2 = ustrregexm(income, '[[:upper:]]') /* capital letters */ Gen index3 = ustrregexm(income, '[[:digit:]]') /* capital letter */

(6)遡及的参照

最初にこの例を見てみましょう(例のデータはstatalistフォーラムからのものです):

clear input strL report_text 'indication I want this 1 view' 'indication I want this 2 views' 'indications I want this 3 view' 'indications I want this 4 views' 'history I want this 5 view' 'history I want this 6 views' 'xxx I dont want this yyy' 'indication I dont want this either yyy' 'xxx nor this view' end

取り出したいなら これが欲しい1これが欲しい2 待って、前の試合と何が違うと思いますか?上記の例では、すべての番号が複数の番号から一致する番号と一致します。ここでは、各番号から修飾された部分を取り出します。このとき、バックトラッキング方式を使用できます。まず、文字データに基づいて、正規表現を使用して完全な文字を照合し、次に**()**を使用して、関心のある部分を抽出します。この時点で、regexmを使用できます。 regexsで関数。

0は、一致のすべての内容を意味します1は、最初の括弧の内容を意味します2は、2番目の括弧の内容を意味します3は、3番目の括弧の内容を意味します。例えば:

Gen indication0=regexs(0) if regexm(lower(report_text),'^(indications|indication|history)(.*)(views|view)$') /* . means matching any character */ gen indication1=regexs(1) if regexm(lower(report_text),'^(indications|indication|history)(.*)(views|view)$') gen indication2=regexs(2) if regexm(lower(report_text),'^(indications|indication|history)(.*)(views|view)$') gen indication3=regexs(3) if regexm(lower(report_text),'^(indications|indication|history)(.*)(views|view)$') list . list, compress +------------------------------------------------------------------------------------------------------------------+ | report_text indication0 indication1 indication2 ind~3 | |------------------------------------------------------------------------------------------------------------------| 1. | indication I want this 1 view indication i want this 1 view indication i want this 1 view | 2. | indication I want this 2 views indication i want this 2 views indication i want this 2 views | 3. | indications I want this 3 view indications i want this 3 view indications i want this 3 view | 4. | indications I want this 4 views indications i want this 4 views indications i want this 4 views | 5. | history I want this 5 view history i want this 5 view history i want this 5 view | |------------------------------------------------------------------------------------------------------------------| 6. | history I want this 6 views history i want this 6 views history i want this 6 views | 7. | xxx I dont want this yyy | 8. | indication I dont want this either yyy | 9. | xxx nor this view | +------------------------------------------------------------------------------------------------------------------+ .

考え

clear input str10 income 'abc123' 'a1' 'abcdef12345' end

値の一部を削除するにはどうすればよいですか?

(7)()と[]の違い

clear input str10 income 'abc' 'ab' 'aa' 'abcd' 'aad' 'aab123' 'cdf12345' '123' end Gen index1 = regexm(income,'[ab]') /* means match a or b*/ Gen index2 = regexm(income,'(a|b)') /* means match a or b*/ Gen index3 = regexm(income,'(ab)') /* means match ab*/

(8)共通マッチング

(参考資料: https://blog.csdn.net/wangjia55/article/details/7877915 )。

  • 漢字に一致する正規表現:[u4e00-u9fa5]

解説:中国語のマッチングは本当に頭痛の種です。この表現で、それは簡単です。

  • 2バイト文字(漢字を含む)に一致します:[^x00-xff]

コメント:文字列の長さの計算に使用できます(2バイト文字の長さ2、ASCII文字1)

  • 空白行に一致する正規表現: s*

コメント:空白行を削除するために使用できます

  • HTMLタグに一致する正規表現:]*>.*?|

解説:インターネットで流通しているバージョンが悪すぎる。上記はパーツにのみ一致します。複雑なネストされたタグにはまだ無力です。

  • 先頭と末尾の空白文字に一致する正規表現:^s*|s*$

コメント:行の最初の行の終わりにある空白(スペース、タブ、改ページなどを含む)を削除するために使用できます。

  • メールアドレスに一致する正規表現:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

解説:フォーム検証に実用的

  • URLに一致する正規表現URL:[a-zA-z]+://[^s]*

解説:オンラインバージョンのバージョンは非常に限られており、この基本はニーズを満たすことができます

  • 一致するアカウントが合法かどうか(文字で始まり、5〜16バイトを許可し、英数字のアンダースコアを許可します):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

解説:フォーム検証に実用的

  • 国内の電話番号と一致する:d{3}-d{8}|d{4}-d{7}

解説:0511-4405222などのマッチングフォームまたは021-87888822

  • Tencent QQ番号に一致:[1-9][0-9]{4,}

解説:TencentQQ番号は10000から始まります

  • 中国の郵便番号に一致:[1-9]d{5}(?!d)

解説:中国の郵便番号は6桁です

  • マッチID:d{15}|d{18}

解説:中国のIDカードは15または18です

  • IPアドレスに一致:d+.d+.d+.d+

解説:IPアドレスを抽出するときに役立ちます




スタタウィンターホリデークラス
Lian Yujun-Jiang Yu、スピーカー、2019年1月17〜27日、北京


されている プライマリクラス !! されている 上級クラス |
されている 紙のクラス | されている フルコース




St. Stataの例:正規表現を使用してDoubanの映画レビューデータをクロールする

説明:次の例では、主に外部コマンドmossを使用しましたが、上記のコマンドで試すことができます。

clear import delimited 'https://movie.douban.com/top250?start=25&filter=',delimiters('^') varnames(1) rowrange(3) encoding('UTF-8') clear **Number of people evaluated net install moss, from(http://fmwww.bc.edu/RePEc/bocode/m) Moss doctypehtml, match('( )') regex prefix(c_) gen comment_num = real(regexs(1)) if regexm(doctypehtml,'([0-9]+)') & c_count==1 tempfile comment_num score title year comment preserve drop if comment_num==. keep comment_num save `comment_num',replace restore **use `comment_num',clear ** Rating moss doctypehtml, match('(v:average)') regex prefix(s_) gen score = real(regexs(1)) if regexm(doctypehtml,'([0-9][.][0-9])') & s_count==1 preserve drop if score==. keep score save `score',replace restore **use `score',clear **Title gen title1 = regexs(1) if regexm(doctypehtml,'($)')==1 **gen title6 = regexs(1) if regexm(doctypehtml,'()(^ )(.+)')==1 gen title2 = title1 if regexm(title1,'( )')==1 gen title=(title1~=title2) gen title_for = doctypehtml if title==1 preserve drop if title_for=='' drop in 1 keep title_for split title_for,parse(> <) keep title_for3 save `title',replace restore **Year gen year= real(regexs(1)) if regexm(doctypehtml,'([0-9][0-9][0-9][0-9])( )') preserve drop if year==. keep year save `year',replace restore **Featured comments gen comment_text= regexs(0) if regexm(doctypehtml,'( 。) keep comment2 save `comment',replace restore use `comment_num',clear merge 1:1 _n using `year',nogenerate merge 1:1 _n using `comment',nogenerate merge 1:1 _n using `title',nogenerate merge 1:1 _n using `score',nogenerate **split comment,parse(> 。) drop if year==. list,table order title_for3 year score comment_num comment2 Rename (title_for3 year score comment_num comment2) (movie name publication year movie rating comment number of classic comments) -------------------------------------------------------------------------------------------------------------------------- Movie Name Year of Publication Film Rating Comment Number of People Comments |--------------------------------------------------------------------------------------------------------------------- 1. | Gone with the Wind 1939 9.2 338897 Tomorrow is another day 2. | Batman: Dark Knight 2008 9.1 445292 Endless Darkness 3. | Alive 1994 9.2 367641 Zhang Yimou's best movie 4. | Paradise Cinema 1988 9.1 371147 Those kisses, those youths, are so clear in tears in the darkness of the theater 5. | The Fantasy Drifting of the Junior School 2012 9 731586 A magnificent and unparalleled adventure |--------------------------------------------------------------------------------------------------------------------- 6. | Twelve Angry 1957 9.4 218126 Idealism in 1957 7. | The devil is coming 2000 9.2 303688 The kindness to the enemy is cruel to oneself. 8. | Lord of the Rings 3: The King is invincible 2003 9.1 363564 The final chapter of the epic 9. | Prosecution Witness 1957 9.6 149201 Billy Wyeth's full work 10. | City of the Sky 1986 9 423985 Chasing the Sky, Never Stops |--------------------------------------------------------------------------------------------------------------------- 11. | Fight Club 1999 9 478422 Evil and mediocrity lie in the same mother, confronting each other at a specific time 12. | Flying House Tour 2009 8.9 645980 The last and most boring thing is the most memorable 13. | The Journey to the West of the Journey to the West 1995 8.9 544247 14. | Roman Holiday 1953 9 488403 Love even if only one day 15. | Wrestling! Dad 2016 9.1 661737 You are not fighting for you alone, you have to let thousands of women see girls, not just to teach each other |--------------------------------------------------------------------------------------------------------------------- 16. | Eavesdropping Storm 2006 9.1 289688 Another Life 17. | Howl's Moving Castle 2004 8.9 461128 Flying with the beloved in the sky 18. | Defender 2013 9.2 287409 The reality of the film is greater than the film itself 19. | Smelling a woman 1992 9 414805 The most beautiful tango in history 20. | Two-barreled smoker 1998 9.1 327431 Four stinkers top Zhuge Liang, Guy Ritchie is not covered |--------------------------------------------------------------------------------------------------------------------- 21. | Flying over the madhouse 1975 9 331838 Long live free 22. | The Death Poetry Society 1989 9 355404 When an active variable appears in a stagnant system, all the rancid odors stand opposite the light. 23. | V-Vendetta 2005 8.8 538168 The ideal and revolution behind a mask 24. | Dolphin Bay 2009 9.3 218285 The smile of the dolphins is the world's brightest camouflage 25. | Godfather 2 1974 9.1 242211 Elegant loneliness +---------------------------------------------------------------------------------------------------------------------

考え :上記のプログラムは、最初のページのデータのみをクロールします。データの最初の10ページを登りたい場合(^^ここでは科学研究の目的で、誰もが忙しいので、ワームを頻繁にクロールしないでください)、どうすればよいですか?

tempfile building save `building', emptyok scalar web1='https://movie.douban.com/top250?start=' scalar web3='&filter=' forv i = 10(-1)1{ local k = (`i'-1)*25 local url=web1 + '`k'' + web3 *scalar list url di `'`url''' import delimited '`url'',delimiters('^') varnames(1) rowrange(3) encoding('UTF-8') clear **Number of people evaluated net install moss, from(http://fmwww.bc.edu/RePEc/bocode/m) Moss doctypehtml, match('( )') regex prefix(c_) gen comment_num = real(regexs(1)) if regexm(doctypehtml,'([0-9]+)') & c_count==1 tempfile comment_num score title year comment preserve drop if comment_num==. keep comment_num save `comment_num',replace restore ** Rating moss doctypehtml, match('(v:average)') regex prefix(s_) gen score = real(regexs(1)) if regexm(doctypehtml,'([0-9][.][0-9])') & s_count==1 preserve drop if score==. keep score save `score',replace restore **Title gen title1 = regexs(1) if regexm(doctypehtml,'($)')==1 **gen title6 = regexs(1) if regexm(doctypehtml,'()(^ )(.+)')==1 gen title2 = title1 if regexm(title1,'( )')==1 gen title=(title1~=title2) gen title_for = doctypehtml if title==1 preserve drop if title_for=='' drop in 1 keep title_for split title_for,parse(> <) keep title_for3 save `title',replace restore **Year gen year= real(regexs(1)) if regexm(doctypehtml,'([0-9][0-9][0-9][0-9])( )') preserve drop if year==. keep year save `year',replace restore **Featured comments gen comment_text= regexs(0) if regexm(doctypehtml,'( 。) keep comment2 save `comment',replace restore use `comment_num',clear merge 1:1 _n using `year',nogenerate merge 1:1 _n using `comment',nogenerate merge 1:1 _n using `title',nogenerate merge 1:1 _n using `score',nogenerate drop if year==. append using `building' save `'`building''', replace } list in 1/10 use `'`building''',clear

第四に、まとめ

  1. 使用する場合 されている 14以降のバージョン、使用してみてください ustr 最初のコマンドはより完全です。
  2. 正規表現を学び、もっと練習し、もっと練習し、もっと練習しましょう! !

参考資料

  1. 正規表現を使用して文字列変数の一部を抽出するにはどうすればよいですか?
  2. 正規表現とは何ですか?Stataでどのように使用できますか?
  3. 正規表現の新しいプログラム
  4. Stata14 VS Stata13PKの文字列関数
  5. Stataの正規表現
  6. オンライン正規表現テスト

付録:ツイートdofileコレクション

[Stata:正規表現とテキスト分析]ツイート内のすべてのdofile


私たちに関しては

  • 【【 スタタイブニングクラブ(公開番号:StataChina) 】SunYat-sen大学のLianYujunのチームによって設立され、Stataアプリケーションのさまざまな経験とスキルを定期的に共有することを目的としています。
  • 公開ツイートは同時に公開されます CSDN-Stata共有クラブJaneBook-Stata共有セッション知っている-LianYujunStataコラム 。上記のウェブサイトでキーワードを検索できます。StataまたはStata Club後でフォローしてください。
  • ツイートの下部をクリックして[オリジナルを読んで]、ツイート内のリンクを表示し、関連情報をダウンロードしてください。
  • ステートクラブ 素晴らしいツイート1 || 素晴らしいツイート2

お問い合わせ

  • 原稿へようこそ: 記事やメモをStata Evening Club (Public Number: StataChina)に送信することを歓迎します。署名は保持されますFive上記では、次のことができます。 自由 Stataオンサイトトレーニング(初級または上級)の資格を取得します。
  • コメントと情報: 貴重なフィードバックをお待ちしております。ツイートに記載されているプログラムやデータをリクエストすることもできます。
  • 人材の採用: 私たちのチームに参加して、一緒にStataを学ぶことを歓迎します。 5つ以上の原稿を共同編集または作成すると、次のことができます。 自由 Stataオンサイトトレーニング(初級または上級)の資格を取得します。
  • 連絡先メールアドレス: [メール保護]

過去のツイート


スタタ(:スタタチャイナ)